PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

PostgreSQL / JDBC và TIMESTAMP so với TIMESTAMPTZ

Nói chung sử dụng TIMESTAMPTZ

Đây là lời khuyên từ David E. Wheeler, một chuyên gia của Postgres, trong một bài đăng trên blog có tiêu đề nói lên tất cả:
Luôn sử dụng TIMESTAMP VỚI KHU VỰC THỜI GIAN (TIMESTAMPTZ)

Nếu bạn đang theo dõi những khoảnh khắc thực tế, những điểm cụ thể trên dòng thời gian, hãy sử dụng TIMESTAMP WITH TIME ZONE .

Một ngoại lệ:Phân vùng

Ngoại lệ duy nhất của Wheeler là khi phân vùng trên dấu thời gian, vì những hạn chế về kỹ thuật. Một ngoại lệ hiếm hoi cho phần lớn chúng ta.

Để biết thông tin về phân vùng, hãy xem doc và xem Wiki .

Chữ viết sai

Tên loại dữ liệu timestamp with time zonetimestamp without time zone là những kẻ nói bậy. Trong cả hai trường hợp giá trị ngày-giờ được lưu trữ trong UTC (không có chênh lệch múi giờ). Đọc lại câu trước đó. UTC, luôn luôn. Cụm từ "với múi giờ" có nghĩa là "chú ý đến múi giờ", không phải "lưu trữ múi giờ cùng với giá trị này". Sự khác biệt giữa các loại là liệu có nên áp dụng bất kỳ múi giờ nào trong quá trình lưu trữ (CHÈN hoặc CẬP NHẬT) hoặc truy xuất (truy vấn CHỌN) hay không. (Hành vi này được mô tả cho Postgres - Các cơ sở dữ liệu khác khác nhau rất nhiều về vấn đề này.)

Chính xác hơn, người ta nên nói rằng TIMESTAMP KHÔNG CÓ Múi giờ lưu trữ các giá trị ngày-giờ mà không có múi giờ. Nhưng nếu không có bất kỳ tham chiếu khung thời gian nào, bất kỳ ai nhìn vào dữ liệu đó sẽ phải giả định (hy vọng, cầu nguyện?) Rằng các giá trị là UTC. Nhưng một lần nữa, hãy tranh luận vì bạn gần như không bao giờ nên sử dụng loại này.

Đọc tài liệu cẩn thận và thử nghiệm một chút để làm rõ sự hiểu biết của bạn.

Chưa phân vùng

Nếu bạn muốn lưu trữ ý tưởng chung về thời gian có thể có chứ không phải là một thời điểm cụ thể, hãy sử dụng loại khác, TIMESTAMP WITHOUT TIME ZONE .

Ví dụ:Giáng sinh năm nay bắt đầu vào thời điểm đầu tiên của ngày 25 tháng 12 năm 2017. Đó sẽ là 2017-12-25T 00:00:00 không có chỉ báo về múi giờ cũng như không có độ lệch từ UTC. Giá trị này chỉ là một ý tưởng mơ hồ về những khoảnh khắc có thể xảy ra. Nó không có ý nghĩa gì cho đến khi chúng ta áp dụng múi giờ (hoặc độ lệch). Vì vậy, chúng tôi lưu trữ thông tin này bằng cách sử dụng TIMESTAMP WITHOUT TIME ZONE .

Các chú lùn đang biên chế Bộ phận hậu cần cho các sự kiện đặc biệt của ông già Noel áp dụng múi giờ như một phần của quá trình lập kế hoạch của họ. Múi giờ sớm nhất hiện là Pacific/Kiribati , 14 giờ trước UTC. Các chú lùn lên lịch trình ông già Noel đến đó lần đầu tiên. Các yêu tinh lên lịch kế hoạch bay đưa tuần lộc đến các múi giờ khác mà nửa đêm đến ngay sau đó, chẳng hạn như Pacific/Auckland . Họ tiếp tục đi về phía Tây khi đến nửa đêm của mỗi khu vực. Vài giờ sau ở Asia/Kolkata , sau đó vẫn ở Europe/Paris , muộn hơn vài giờ nữa tại America/Montreal và như thế.

Mỗi khoảnh khắc giao hàng cụ thể này sẽ được các yêu tinh ghi lại bằng cách sử dụng WITH TIME ZONE , trong khi ý tưởng chung về lễ Giáng sinh sẽ được lưu trữ dưới dạng WITHOUT TIME ZONE .

Một cách sử dụng khác trong các ứng dụng dành cho doanh nghiệp cho WITHOUT TIME ZONE đang lên lịch các cuộc hẹn xa hơn vài tuần. Các chính trị gia trên khắp thế giới có xu hướng không thể giải thích được là làm rối đồng hồ và xác định lại các quy tắc múi giờ. Họ tham gia Giờ tiết kiệm ánh sáng ban ngày (DST), rời DST, bắt đầu DST vào một ngày khác hoặc kết thúc DST vào một ngày khác hoặc thay đổi đồng hồ của họ 15 phút hoặc nửa giờ. Tất cả những điều này đã được thực hiện trong vài năm qua bởi Thổ Nhĩ Kỳ, Hoa Kỳ, Nga, Venezuela và những nước khác.

Các chính trị gia thường thực hiện những thay đổi này với rất ít báo trước. Vì vậy, nếu bạn đang lên lịch cho một cuộc hẹn khám nha khoa trong sáu tháng vào lúc 13:00, có lẽ điều đó sẽ được lưu trữ dưới dạng TIMESTAMP WITHOUT TIME ZONE hoặc nếu không, các chính trị gia có thể thay đổi cuộc hẹn của bạn thành buổi trưa hoặc 2 giờ chiều hoặc 13:30.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự phát triển của khả năng chịu lỗi trong PostgreSQL

  2. PostgreSQL có hỗ trợ các cụm từ không nhạy cảm trọng âm không?

  3. Postgres:Làm thế nào để chuyển đổi một chuỗi json thành văn bản?

  4. Làm thế nào để loại bỏ các bản sao để chỉ có các cặp tồn tại trong một bảng?

  5. SQLAlchemy, Psycopg2 và Postgresql COPY