Tôi đã từng có một vấn đề rất giống nhau nhiều năm trước, và sau đó phát hiện ra rằng tôi có thể làm được
ALTER DATABASE database_name SET datestyle TO "ISO, MDY";
Hãy thử điều đó. (Điều này hoạt động trên cơ sở cơ sở dữ liệu, cho một giải pháp cho tất cả các cơ sở dữ liệu của bạn, đặt tham số này trong bạn postgresql.conf
- cảm ơn @a_horse_with_no_name.)
Xin lưu ý rằng cài đặt mặc định không độc lập . Tuy nhiên, sau khi initdb
đặt nó thành bất cứ thứ gì nó muốn, bạn có thể tự thay đổi nó trong postgresql.conf
.
Nhận xét của @ swasheck khiến tôi lưu ý rằng với cài đặt của mình:
test=# SHOW lc_ctype;
lc_ctype
--------------------
Hungarian, Hungary
(1 row)
test=# SHOW lc_time;
lc_time
--------------------
Hungarian, Hungary
(1 row)
cài đặt datestyle
có tác dụng sau:
SET datestyle TO "ISO, MDY";
SELECT current_date;
date
------------
2012-06-21
(1 row)
Bây giờ điều này không thực sự được mong đợi - và nó cũng tương tự trên một máy chủ khác en_US.UTF8
. Cố gắng "ISO, DMY"
, cũng gợi ý cho tôi rằng "ISO"
phần này ít nhiều sẽ ghi đè lên phần khác khi sản xuất một đầu ra . Đối với các giá trị đầu vào , nó có hiệu ứng mong đợi, như được tóm tắt trong bảng dưới đây:
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
- có nghĩa là ở trên rằng kiểu đầu vào đã cho dẫn đến lỗi cho datestyle
cài đặt đã cho .
Khi đọc kỹ tài liệu, người ta có thể thấy đó datestyle
là một cặp cài đặt xung đột một phần:
Vì lý do lịch sử, biến này chứa hai thành phần độc lập: đặc tả định dạng đầu ra (ISO, Postgres, SQL hoặc tiếng Đức) và đặc tả đầu vào / đầu ra cho thứ tự năm / tháng / ngày (DMY, MDY hoặc YMD).
Đối với tôi, điều đó có nghĩa là người ta phải tìm ra thứ phù hợp với nhu cầu của họ bằng một chút thử nghiệm - nhưng cách tốt nhất là để mặc định và luôn sử dụng định dạng đầu vào rõ ràng. Hai trong số này là 'YYYY-MM-DD'
và 'YYYYMMDD'
. Tôi thích cái trước - thậm chí sử dụng IRL này;)
Lưu ý: datestyle
cài đặt (và các cài đặt thời gian chạy khác) từ postgresql.conf
có thể được ghi đè bằng một ALTER DATABASE bla SET datestyle ...
, thiết lập nó vĩnh viễn cho một cơ sở dữ liệu hoặc bằng cách SET datestyle TO ...
đặt nó cho phiên hiện tại. Điều này sau có thể hữu ích khi nhập một số dữ liệu của bên thứ ba với định dạng ngày khác.