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

Máy chủ phân tán theo địa lý, PostgreSQL và JPA

Giải pháp là sử dụng các trường TIMESTAMPTZ cho các phiên bản này đúng lúc. Một cái gì đó như "người dùng được tạo khi nào" sẽ không bao giờ được lưu trữ với trường TIMESTAMP vì theo mặc định nó không chứa thông tin TZ. Trình điều khiển JDBC xử lý những điều này khá tùy tiện. Ví dụ, hãy xem xét những điều sau:

Giả sử JVM của bạn ở vùng America / Los_Angeles trong khi máy chủ cơ sở dữ liệu của bạn ở UTC.

Sau đó, tạo bảng sau:

 CREATE TABLE test (
   id   INTEGER,
   ts   TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
   tswz TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
 );

Nếu bạn phát hành từ PSQL:

 INSERT INTO test(id) values(1);

Bạn sẽ nhận được các giá trị giống hệt nhau cho "ts" và "tswz". Cả hai sẽ là giờ UTC hiện tại. Tuy nhiên, nếu bạn thực hiện truy vấn CÙNG CHÍNH XÁC từ Java bằng trình điều khiển JDBC thì "ts" sẽ là thời gian hiện tại ở Los Angeles và "tswz" sẽ là giờ UTC.

Tôi không biết LÀM THẾ NÀO để trình điều khiển chuyển đến máy chủ múi giờ JVM trong trường hợp này vì chúng tôi đang đặt mặc định trường trên máy chủ. Họ nói rằng họ không đặt múi giờ cho phiên, nhưng họ phải làm như vậy. Dù bằng cách nào, nếu bạn sử dụng trường TIMESTAMPTZ thì bạn sẽ nhận được các phiên bản giống nhau từ bất kỳ JVM nào bất kể múi giờ đó xảy ra ở đâu.




  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ách duyệt ngược cấu trúc cấu trúc cây phân cấp bằng cách sử dụng truy vấn đệ quy

  2. Việc sử dụng trình tự PostgreSQL ở chế độ ngủ đông không ảnh hưởng đến bảng trình tự

  3. Sequelize:Truy vấn nếu ARRAY chứa một giá trị

  4. Thứ tự cập nhật cơ sở dữ liệu

  5. postgresql COUNT (DISTINCT ...) rất chậm