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

Dấu thời gian Postgres

Không có giải pháp chống đạn nào ở đây.

Lời khuyên đầu tiên của tôi:đừng bao giờ dựa vào múi giờ mặc định của máy chủ.

Lời khuyên thứ hai của tôi:hãy chọn giữa timestamp - timestamptz theo ngữ nghĩa (chủ yếu) của dữ liệu.

Chi tiết hơn:PostgresSQL có hai biến thể dấu thời gian, có tên gây nhầm lẫn là TIMESTAMP WITHOUT TIMEZONE (timestamp) TIMESTAMP WITH TIMEZONE (timestamptz) . Trên thực tế, không lưu trữ một múi giờ, thậm chí không phải là một khoảng thời gian bù đắp. Cả hai kiểu dữ liệu đều có cùng chiều rộng (4 byte) và sự khác biệt của chúng rất nhỏ - và tệ hơn, có thể khiến bạn khó chịu nếu bạn không hiểu đầy đủ về chúng và máy chủ của bạn thay đổi múi giờ. Bộ quy tắc tỉnh táo của tôi là:

  • Sử dụng TIMESTAMP WITH TIMEZONE (timestamptz) để lưu trữ các sự kiện chủ yếu liên quan đến thời gian "thực tế" , mà bạn chủ yếu quan tâm đến việc truy vấn xem event 1 trước event 2 (bất kể múi giờ), hoặc khoảng thời gian tính toán (tính bằng "đơn vị vật lý", ví dụ:giây; không tính theo đơn vị "dân dụng" là ngày-tháng, v.v.). Ví dụ điển hình là thời gian tạo / sửa đổi bản ghi - người ta thường có nghĩa là từ " Dấu thời gian ".

  • Sử dụng TIMESTAMP WITHOUT TIMEZONE (timestamp) để lưu trữ các sự kiện mà thông tin liên quan là "thời gian dân sự" (nghĩa là các trường {year-month-day hour-min-sec} nói chung), và các truy vấn liên quan đến tính toán lịch. Trong trường hợp này, bạn sẽ chỉ lưu trữ ở đây "giờ địa phương", tức là ngày-giờ liên quan đến một số múi giờ không xác định (không liên quan hoặc ngụ ý hoặc được lưu trữ ở một nơi khác).

Tùy chọn thứ hai giúp bạn truy vấn dễ dàng hơn, chẳng hạn như "tất cả các sự kiện đã xảy ra vào ngày '2013-01-20'" (trong từng khu vực / quốc gia / múi giờ tương ứng) - nhưng khiến việc truy vấn "tất cả các sự kiện đó trở nên khó khăn hơn xảy ra (thực tế) trước một sự kiện tham chiếu "(trừ khi chúng tôi biết chúng ở cùng múi giờ). Bạn chọn.

Nếu bạn cần đầy đủ, cũng không đủ, bạn cần lưu trữ múi giờ hoặc khoảng chênh lệch trong một trường bổ sung. Một tùy chọn khác, lãng phí một vài byte nhưng có thể hiệu quả hơn cho các truy vấn là lưu trữ cả hai trường.

Xem thêm câu trả lời này .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cài đặt Orafce.sql 3.0 trong Windows 7

  2. Thay đổi loại cột được sử dụng trong các dạng xem khác

  3. SQL:Nhóm các giá trị tương tự của cột B, nhưng sắp xếp theo cột A

  4. cách mở kết nối PostgreSQL khỏi IBM WSJdbc41Connection

  5. Cách nâng cấp pg_restore trong docker postgres image 10.3 lên 10.5