如何设置Postgresql数据库以将日期永久显示为“ MDY”


22

如何在不运行的情况下将数据库设置为将“日期”显示为“ MDY”:

SET datestyle = "ISO, MDY";

每次我尝试访问它?我正在使用Postgresql版本9.1,Ubuntu 12.04。在安装数据库时,我的系统语言环境设置为en_CA.utf8,最近我将其更改为en_US.utf8

show lc_CTYPE

返回:-> "en_CA.UTF-8"

show LC_CoLLATE

返回:-> "en_CA.UTF-8"

Answers:


32

几年前我曾经遇到过非常类似的问题,然后发现我可以

ALTER DATABASE database_name SET datestyle TO "ISO, MDY";

试试看 (这对于每个数据库都有效,对于所有数据库的解决方案,都可以在其中设置此参数postgresql.conf-感谢@a_horse_with_no_name。)

请注意,默认设置不是独立于语言环境的。但是,initdb将其设置为所需的值后,您可以在中自行进行更改postgresql.conf

@swasheck的评论让我注意到我的设置:

test=# SHOW lc_ctype;
      lc_ctype
--------------------
 Hungarian, Hungary
(1 row)


test=# SHOW lc_time;
      lc_time
--------------------
 Hungarian, Hungary
(1 row)

设置datestyle具有以下效果:

SET datestyle TO "ISO, MDY";

SELECT current_date;
    date
------------
 2012-06-21
(1 row)

现在这并不是真正的预期-并且在具有的其他服务器上en_US.UTF8也是如此。尝试"ISO, DMY"也表明我"ISO"在产生输出时该部分或多或少地覆盖了另一部分。对于输入值,它具有预期的效果,如下表所示:

                          input values
           '2016/01/21'   '01/21/2016'   '21/01/2016'         output
──────────────────────────────────────────────────────────────────────
ISO, YMD        OK             --             --            2016-01-21
ISO, DMY        --             OK             --            2016-01-21
ISO, MDY        --             --             OK            2016-01-21

-意思是,给定的输入样式会导致给定datestyle设置错误。

仔细阅读文档后,可以看到这datestyle是一对部分冲突的设置:

出于历史原因,此变量包含两个独立的组件:输出格式规范(ISO,Postgres,SQL或德语)和用于年/月/日排序的输入/输出规范(DMY,MDY或YMD)。

对我来说,这意味着必须通过一些试验来找到适合其需求的方法-但最好的方法是将其保留为默认值,并始终使用明确的输入格式。其中两个是'YYYY-MM-DD''YYYYMMDD'。我更喜欢前者-甚至使用此IRL;)

注意:的datestyle设置(和其他运行时设置)postgresql.conf可以被覆盖ALTER DATABASE bla SET datestyle ...,可以为单个数据库永久SET datestyle TO ...设置,也可以为当前会话设置。当导入具有不同日期格式的某些第三方数据时,后者可能很有用。


3

谢谢@a_horse_with_no_name | @dezso | @ypercubeᵀᴹ

我想编写简单易行的答案:步骤

方法1仅按数据库设置datestyle

  1. show datestyle;向您显示当前日期样式“ ISO,DMY ”或“ ISO,MDY”

  2. 现在取决于您在以下查询中设置的postgres DMYMDY中的要求

    ALTER DATABASE "my_database_name" SET datestyle TO "ISO, DMY";

    要么

    ALTER DATABASE "my_database_name" SET datestyle TO "ISO, MDY";

  3. 最重要的步骤:总是在设置datestyle后重启postgres

    sudo service postgresql restart

    要么

    sudo /etc/init.d/postgresql restart

  4. 让测试配置

    如果您已将DMY设置为以下查询,则该查询将为您工作

    查询:select '20/12/2016'::date 输出: "2016-12-20"

    要么

    如果您在下面的查询中设置了MDY,那么它应该对您有用

    查询:select '12/19/2016'::date 输出: "2016-12-19"

方式2:永久:在配置文件中设置的任何内容都将在以后创建的所有数据库中设置

  1. 在/etc/postgresql/9.3/main/postgresql.conf中设置

    datestyle = 'iso, dmy' 要么 datestyle = 'iso, mdy'

  2. 最重要的步骤:总是在设置datestyle后重启postgres

    sudo service postgresql restart

    要么

    sudo /etc/init.d/postgresql restart

  3. 让测试配置

    如果您已将DMY设置为以下查询,则该查询将为您工作

    查询:select '20/12/2016'::date 输出: "2016-12-20"

    要么

    如果您在下面的查询中设置了MDY,那么它应该对您有用

    查询:select '12/19/2016'::date 输出: "2016-12-19"

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.