Tôi nghĩ rằng Django tạo ra các cột datetime là thời gian bất khả tri, nhưng khi tôi nhìn vào bảng Postgres của tôi, tôi thấy rằng các giá trị được ghi lại có thông tin múi giờ.Tại sao Django tạo cột dấu thời gian Postgres với múi giờ?
Đi xa hơn tôi thấy rằng phụ trợ Postgres hướng Django để tạo cột sử dụng múi giờ.
Từ django/db/backends/postgresql/creation.py:
data_types = {
...
'DateTimeField': 'timestamp with time zone',
...
Giản đồ cho thấy cột tạo ra được quy định như "timestamp với múi giờ".
CREATE TABLE notification_notice
(
...
created timestamp with time zone NOT NULL,
...
Nhật ký Postgres hiển thị câu lệnh cập nhật đã được gửi. Django đã xây dựng một câu lệnh SQL sử dụng UTC làm múi giờ theo chỉ dẫn của tệp cài đặt Django của tôi.
UPDATE "notification_notice" SET "sender_id" = 1, "group_id" = NULL, "notice_type_id" = 1, "content_type_id" = 21, "object_id" = 3, "created" = E'2011-11-11 22:31:08.022148' WHERE "notification_notice"."id" = 14
Đây là bảng của tôi. Cột được tạo có một timestame có "-08" cho múi giờ của nó. Postgres phải kiểm tra múi giờ của đồng hồ hệ thống của tôi để tìm múi giờ.
my_db=# select * from notification_notice limit 1;
id | sender_id | group_id | notice_type_id | content_type_id | object_id | created | last_interaction_time
----+-----------+----------+----------------+-----------------+-----------+------------------------------+-----------------------
1 | | 3 | 21 | 53 | 6 | 2011-11-11 14:31:02.98882-08 |
(1 row)
Câu hỏi:
Không Django có một bàn tay ra chính sách để các múi giờ?
Tại sao phụ trợ Postgres sử dụng múi giờ cho mô hình.DateTimeField? Đây có phải là yêu cầu của Postgres không?
Có cách nào để buộc Django tạo cột dấu thời gian trong Postgres không sử dụng múi giờ không?
Câu trả lời có thể có: [tại đây] (http://stackoverflow.com/questions/1869419/django-datetime-field-to-generate-timestamp-fields-without-timezone/1869568#1869568) – unutbu