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

PostgreSQL/JDBC dan TIMESTAMP vs. TIMESTAMPTZ

Biasanya menggunakan TIMESTAMPTZ

Berikut saran dari David E. Wheeler, pakar Postgres, dalam posting blog yang judulnya mengatakan semuanya:
Selalu Gunakan TIMESTAMP DENGAN ZONA WAKTU (TIMESTAMPTZ)

Jika Anda melacak momen aktual, titik tertentu pada garis waktu, gunakan TIMESTAMP WITH TIME ZONE .

Satu Pengecualian:Partisi

Satu-satunya pengecualian Wheeler adalah ketika mempartisi pada cap waktu, karena keterbatasan teknis. Pengecualian yang langka bagi kebanyakan dari kita.

Untuk informasi tentang partisi, lihat doc dan lihat Wiki .

Salah Nama

Nama tipe data timestamp with time zone dan timestamp without time zone adalah keliru. Di keduanya kasus nilai tanggal-waktu disimpan dalam UTC (tidak ada zona waktu offset). Baca lagi kalimat sebelumnya. UTC, selalu. Frasa "dengan zona waktu" berarti "dengan memperhatikan zona waktu", bukan "menyimpan zona waktu di samping nilai ini". Perbedaan antara jenis adalah apakah ada zona waktu yang harus diterapkan baik selama penyimpanan (INSERT atau UPDATE) atau pengambilan (query SELECT). (Perilaku ini dijelaskan untuk Postgres -- Basis data lain sangat bervariasi dalam hal ini.)

Lebih tepatnya, orang harus mengatakan bahwa TIMESTAMP WITHOUT TIME ZONE menyimpan nilai tanggal-waktu tanpa zona waktu. Tetapi tanpa referensi kerangka waktu, siapa pun yang melihat data itu harus berasumsi (berharap, berdoa?) bahwa nilainya adalah UTC. Tapi sekali lagi, diperdebatkan karena Anda hampir tidak pernah menggunakan jenis ini.

Baca dokumen hati-hati, dan bereksperimenlah sedikit untuk memperjelas pemahaman Anda.

Tidak dikategorikan

Jika Anda ingin menyimpan gagasan umum tentang kemungkinan waktu daripada momen tertentu, gunakan jenis lainnya, TIMESTAMP WITHOUT TIME ZONE .

Misalnya, Natal dimulai tahun ini pada saat pertama tanggal 25 Desember 2017. Itu adalah 2017-12-25T 00:00:00 tanpa indikator zona waktu atau offset-dari-UTC. Nilai ini hanyalah gagasan samar tentang kemungkinan momen. Tidak ada artinya sampai kita menerapkan zona waktu (atau offset). Jadi kami menyimpan ini menggunakan TIMESTAMP WITHOUT TIME ZONE .

Para elf yang menjadi staf Departemen Logistik Acara Khusus Sinterklas menerapkan zona waktu sebagai bagian dari proses perencanaan mereka. Zona waktu paling awal saat ini adalah Pacific/Kiribati , 14 jam lebih cepat dari UTC. Para elf menjadwalkan kedatangan pertama Santa di sana. Para elf menjadwalkan rencana penerbangan membawa rusa kutub ke zona waktu lain di mana tengah malam datang tak lama setelahnya, seperti Pacific/Auckland . Mereka terus menuju ke barat saat tengah malam masing-masing zona tiba. Beberapa jam kemudian di Asia/Kolkata , masih nanti di Europe/Paris , masih beberapa jam lagi di America/Montreal dan seterusnya.

Setiap momen pengiriman spesifik ini akan direkam oleh para elf menggunakan WITH TIME ZONE , sedangkan ide umum Natal akan disimpan sebagai WITHOUT TIME ZONE .

Penggunaan lain dalam aplikasi bisnis untuk WITHOUT TIME ZONE menjadwalkan janji lebih jauh dari beberapa minggu. Politisi di seluruh dunia memiliki kecenderungan yang tidak dapat dijelaskan untuk mengacaukan waktu dan mendefinisikan ulang aturan zona waktu. Mereka bergabung dengan Waktu Musim Panas (DST), meninggalkan DST, memulai DST pada tanggal yang berbeda, atau mengakhiri DST pada tanggal yang berbeda, atau menggeser jam mereka 15 menit atau setengah jam. Semua ini telah dilakukan dalam beberapa tahun terakhir oleh Turki, Amerika Serikat, Rusia, Venezuela, dan lainnya.

Para politisi sering membuat perubahan ini dengan sedikit peringatan. Jadi, jika Anda menjadwalkan janji temu gigi selama enam bulan pada pukul 13:00, itu mungkin harus disimpan sebagai TIMESTAMP WITHOUT TIME ZONE atau sebaliknya para politisi dapat secara efektif mengubah janji Anda menjadi siang, atau 14:00, atau 13:30.



  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 memberikan kata sandi untuk Createdb PostgreSQL secara non-interaktif?

  2. cara menggunakan nilai kolom sebagai input untuk operasi spasial

  3. Cara Memantau Kinerja PostgreSQL 12 dengan OmniDB – Bagian 2

  4. PostgreSQL mengembalikan tanggal yang tepat atau terdekat dengan tanggal yang ditanyakan

  5. Menerapkan Postgres Sql di Apache Airflow