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

Dấu thời gian jOOQ được lưu trữ với độ lệch múi giờ cục bộ

Rất tiếc, bạn có một số thứ đang chống lại bạn:

  1. Trình điều khiển PostgreSQL JDBC đặt múi giờ thành múi giờ JVM của bạn trong phiên Postgres. Vì vậy, ngay cả khi Máy chủ cơ sở dữ liệu của bạn đang chạy trong UTC, trường TIMESTAMP sẽ được chèn bằng cách sử dụng múi giờ của JVM của bạn. Khi bạn chèn hoặc truy vấn dữ liệu, máy chủ cơ sở dữ liệu sẽ luôn sử dụng múi giờ JVM.
  2. Bạn đang sử dụng TIMESTAMP thay vì TIMESTAMPTZ. Mô tả của các loại này không phản ánh cách sử dụng thực sự của chúng. TIMESTAMPTZ thực sự có nghĩa là múi giờ bất khả tri. Dù bạn chèn giá trị nào thì giá trị đó sẽ được điều chỉnh thành UTC bằng cách sử dụng múi giờ phiên.

Do hai vấn đề này, nếu bạn có hai JVM khác nhau - một sử dụng thời gian Los Angeles và một sử dụng giờ New York - bất cứ khi nào bạn viết một TIMESTAMP với một JVM thì sẽ là một "UTC time" khác trong JVM kia. TIMESTAMP nhận giá trị đã điều chỉnh và chỉ sử dụng nó như đã cho. Nếu bạn thay đổi cột TIMESTAMP của mình thành TIMESTAMPTZ thì thời gian giống nhau trong cả hai JVM sẽ luôn là thời gian UTC giống nhau.

Nếu bạn nhìn vào Postgres JDBC Driver's ConnectionFactoryImpl # openConnectionImp, bạn có thể thấy nơi nó đặt múi giờ của JVM cục bộ của bạn làm múi giờ cho vùng phiên của máy chủ cơ sở dữ liệu.

Vì vậy, cách duy nhất lành mạnh để giải quyết vấn đề này là chỉ sử dụng TIMESTAMPTZ thay vì TIMESTAMP. Dưới đây là một số thông tin khác về điều này:

PostgreSQL / JDBC và TIMESTAMP so với TIMESTAMPTZ

http://justatheory.com/computers/databases/postgresql/use-timestamptz .html



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django-DB-Migrations:không thể ALTER TABLE vì nó có các sự kiện kích hoạt đang chờ xử lý

  2. Tìm các bản ghi mới cho mỗi n tháng qua trong PostgreSQL

  3. pqxx ::result ::tuple chưa được khai báo (thư viện PostgreSQL cho c ++)

  4. Có thể sử dụng một biến và không chỉ định kiểu trả về trong postgreSQL không?

  5. Cách thoát dấu gạch dưới trong Postgresql