Saya dulu memiliki masalah yang sangat mirip bertahun-tahun yang lalu, dan kemudian menemukan bahwa saya bisa melakukannya
ALTER DATABASE database_name SET datestyle TO "ISO, MDY";
Coba itu. (Ini berfungsi pada basis per basis data, untuk solusi untuk semua basis data Anda, setel parameter ini di dalam diri Anda postgresql.conf
- terima kasih kepada @a_horse_with_no_name.)
Perlu diketahui bahwa pengaturan default tidak independen terhadap lokal . Namun, setelah initdb
menetapkan ke apa pun yang diinginkan, Anda dapat mengubahnya sendiri di postgresql.conf
.
Komentar @ swasheck membuat saya mencatat bahwa dengan pengaturan saya:
test=# SHOW lc_ctype;
lc_ctype
--------------------
Hungarian, Hungary
(1 row)
test=# SHOW lc_time;
lc_time
--------------------
Hungarian, Hungary
(1 row)
pengaturan datestyle
memiliki efek sebagai berikut:
SET datestyle TO "ISO, MDY";
SELECT current_date;
date
------------
2012-06-21
(1 row)
Sekarang ini tidak benar-benar diharapkan - dan itu sama pada server lain en_US.UTF8
juga. Mencoba "ISO, DMY"
, juga menunjukkan kepada saya bahwa "ISO"
bagian tersebut kurang lebih mengesampingkan bagian lain ketika menghasilkan output . Untuk nilai input , ini memiliki efek yang diharapkan, seperti yang dirangkum dalam tabel di bawah ini:
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
- Berarti di atas bahwa gaya input yang diberikan menghasilkan kesalahan untuk datestyle
pengaturan yang diberikan .
Setelah membaca dokumentasi dengan saksama, orang dapat melihat bahwa itu datestyle
adalah sepasang pengaturan yang bertentangan sebagian:
Untuk alasan historis, variabel ini berisi dua komponen independen: spesifikasi format output (ISO, Postgres, SQL, atau Jerman) dan spesifikasi input / output untuk pemesanan tahun / bulan / hari (DMY, MDY, atau YMD).
Bagi saya itu berarti bahwa seseorang harus menemukan yang sesuai dengan kebutuhan mereka dengan sedikit bereksperimen - tetapi cara terbaik adalah meninggalkannya di default dan selalu menggunakan format input yang jelas. Dua di antaranya adalah 'YYYY-MM-DD'
dan 'YYYYMMDD'
. Saya lebih suka yang pertama - bahkan menggunakan IRL ini;)
Catatan: datestyle
pengaturan (dan pengaturan runtime lainnya) dari postgresql.conf
dapat ditimpa oleh ALTER DATABASE bla SET datestyle ...
, pengaturan secara permanen untuk satu basis data, atau dengan SET datestyle TO ...
mengaturnya untuk sesi saat ini. Yang terakhir ini mungkin berguna ketika mengimpor beberapa data pihak ketiga dengan format tanggal yang berbeda.