PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Server yang tersebar secara geografis, PostgreSQL, dan JPA

Solusinya adalah dengan menggunakan bidang TIMESTAMPTZ untuk instans ini tepat waktu. Sesuatu seperti "kapan pengguna dibuat" tidak boleh disimpan dengan bidang TIMESTAMP karena secara default tidak menyimpan informasi TZ. Driver JDBC menangani ini dengan sewenang-wenang. Misalnya, pertimbangkan hal berikut:

Asumsikan JVM Anda berada di zona America/Los_Angeles sementara server database Anda berada di UTC.

Kemudian buat tabel berikut:

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

Jika Anda mengeluarkan dari PSQL:

 INSERT INTO test(id) values(1);

Anda akan mendapatkan nilai yang sama untuk "ts" dan "tswz". Keduanya akan menjadi waktu UTC saat ini. Namun jika Anda melakukan kueri PERSIS SAMA dari Java menggunakan driver JDBC maka "ts" akan menjadi waktu saat ini di Los Angeles dan "tswz" akan menjadi waktu UTC.

Saya tidak tahu BAGAIMANA driver menyampaikan ke server zona waktu JVM dalam hal ini karena kami menetapkan bidang di server secara default. Mereka mengatakan mereka tidak mengatur zona waktu untuk sesi tersebut, tetapi mereka harus melakukannya. Either way, jika Anda menggunakan bidang TIMESTAMPTZ maka Anda akan mendapatkan instan yang sama dari JVM mana pun terlepas dari zona waktu apa yang terjadi.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara menurunkan/memiliki versi Postgres DB sebelumnya di Postgres.app

  2. Apakah PostgreSQL menyimpan penerjemah pl*-nya terus-menerus dimuat?

  3. kesalahan perintah util alembic tidak dapat menemukan pengidentifikasi

  4. Memperbarui JLabel melalui SetIcon dari tipe data bytea di postgres

  5. Kesalahan dalam LINQ (kolom tidak ada) saat menggunakan Entity Framework