日付を永続的に「MDY」として表示するようにPostgresqlデータベースを設定する方法


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"

回答:


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部分的に競合する設定のペアであることがわかります。

歴史的な理由により、この変数には2つの独立したコンポーネントが含まれています。出力形式の仕様(ISO、Postgres、SQL、またはドイツ語)と年/月/日順序の入力/出力仕様(DMY、MDY、またはYMD)です。

私にとっては、少し実験してニーズに合ったものを見つけなければならないことを意味します-しかし、最良の方法はデフォルトのままにして、常に明確な入力フォーマットを使用することです。これらの2つは、'YYYY-MM-DD''YYYYMMDD'。私は前者を好みます-このIRLを使用することさえ;)

注:のdatestyle設定(およびその他のランタイム設定)は、postgresql.confで上書きできます。ALTER DATABASE bla SET datestyle ...単一のデータベースに永続的に設定するかSET datestyle TO ...、現在のセッションに設定することができます。後者は、異なる日付形式でサードパーティのデータをインポートするときに便利です。


3

ありがとう@a_horse_with_no_name | @dezso | しゅう

実装が簡単な答えを書きたい:ステップ

方法1データベースごとにのみ日付スタイルを設定する

  1. show datestyle;現在の日付スタイル「ISO、DMY」または「ISO、MDY」を表示します

  2. 以下のクエリで設定されたpostgresのDMYまたはMDYに必要なものに応じて

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

    または

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

  3. 最も重要なステップ:常に日付スタイルを設定した後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. 最も重要なステップ:常に日付スタイルを設定した後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"

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.