如何設置 Postgresql 數據庫以將日期永久視為“MDY”
如何在不執行的情況下設置我的數據庫以將“日期”視為“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"
幾年前我曾經有一個非常相似的問題,然後發現我可以做到
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 ...
為目前會話設置。後者在導入一些具有不同日期格式的第三方數據時可能很有用。