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

Haruskah saya menyimpan zona waktu secara terpisah dari stempel waktu untuk Postgres dan JDBC?

Saat Anda menyimpan timestamp with time zone (timestamptz ) itu dikonversi ke UTC untuk penyimpanan di DB. Saat diambil, itu dikonversi ke zona waktu klien saat ini, bukan zona waktu awalnya. Ini adalah titik waktu, pada dasarnya.

Ada juga timestamp without time zone (timestamp ). Ini tidak tunduk pada konversi, tetapi tidak membawa cap waktu dengan itu. Jika Anda menyimpan timestamp dengan zona waktu klien Anda diatur ke UTC, lalu ambil ketika zona waktu klien adalah '+08:00', Anda mendapatkan nilai yang sama. Itu setengah dari yang Anda inginkan, karena mempertahankan nilai waktu mentah.

Nama dan perilakunya mengerikan dan membingungkan, tetapi ditetapkan oleh standar SQL.

Anda harus menyimpan zona waktu secara terpisah jika Anda ingin merekam titik waktu pada zona waktu tertentu. Saya akan merekomendasikan menyimpannya sebagai INTERVAL dengan CHECK batasan yang membatasinya menjadi colname BETWEEN INTERVAL '-12' HOUR + INTERVAL '1' SECOND AND INTERVAL '12' HOUR . Definisi tersebut menolak -12:00 dan menerima +12:00; Saya tidak sepenuhnya yakin itu benar, jadi periksalah.

Anda dapat menyimpan timestamp waktu lokal pada zona waktu itu (yang mungkin akan saya lakukan), atau simpan timestamptz waktu UTC saat peristiwa terjadi ditambah offset yang memungkinkan Anda mengonversinya ke waktu lokal.

Keduanya akan berfungsi dengan baik untuk JDBC. Untuk JPA, itu akan tergantung pada seberapa baik penyedia Anda memahami dan memetakan jenis interval. Idealnya Anda menginginkan bidang yang dibuat sementara di entitas Anda yang merekonstruksi instance Kalender yang Anda inginkan menggunakan timestamp dan interval disimpan dalam basis data.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mempertahankan data menggunakan gambar buruh pelabuhan postgres?

  2. Kesalahan saat menghubungkan ke postgresql menggunakan sqlalchemy

  3. Bagaimana cara mengabaikan tanda tanya sebagai pengganti saat menggunakan PDO dengan PostgreSQL

  4. Membuat Database PostgreSQL

  5. ActiveRecord mencoba menyambung ke database yang salah menggunakan rbenv