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

Ubah stempel waktu menjadi waktu lokal untuk zona waktu tertentu selama 'COPY .. TO ..'

Pertama-tama, Anda harus menggunakan timestamptz bukannya timestamp setiap kali bekerja dengan beberapa zona waktu. Akan menghindari masalah sepenuhnya.

Detail:

Anda bisa gunakan AT TIME ZONE membangun seperti @NuLo menyarankan , itu mungkin bahkan berfungsi, tetapi tidak persis seperti yang dijelaskan.

AT TIME ZONE mengonversi tipe timestamp (timestamp without time zone ) ke timestamptz (timestamp with time zone ) dan sebaliknya. Representasi teks dari timestamptz nilainya tergantung pada pengaturan saat ini zona waktu di sesi di mana Anda menjalankan perintah. Kedua timestamptz nilai 100% identik (menunjukkan titik waktu yang sama):

'2015-09-02 15:55:00+02'::timestamptz
'2015-09-02 14:55:00+01'::timestamptz

Tapi representasi teksnya tidak . Tampilannya untuk zona waktu yang berbeda. Jika Anda mengambil string ini secara literal dan memasukkannya ke timestamp ketik, bagian zona waktu diabaikan dan Anda berakhir dengan berbeda nilai-nilai. Karenanya, jika Anda menjalankan COPY pernyataan dalam sesi dengan pengaturan zona waktu yang sama dengan timestamp asli Anda nilai untuk, operasi yang disarankan terjadi untuk bekerja.

Namun, cara bersihnya adalah menghasilkan timestamp yang benar nilai untuk memulai dengan menerapkan AT TIME ZONE dua kali :

SELECT event AT TIME ZONE 'my_target_tz' AT TIME ZONE 'my_source_tz', ...
FROM   logtable
ORDER  BY event desc;

'my_target_tz' adalah "zona waktu Anda sendiri" dan 'my_source_tz' zona waktu server cloud dalam contoh. Untuk memastikan bahwa DST dihormati, gunakan nama zona waktu , bukan singkatan zona waktu. Dokumentasi:

Terkait:

Atau, jauh lebih baik lagi, gunakan timestamptz di mana-mana dan bekerja dengan benar secara otomatis.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kembalikan nilai silang bergabung

  2. Normalisasikan subskrip larik untuk larik 1 dimensi sehingga dimulai dengan 1

  3. Psycopg2 melaporkan kesalahan pg_hba.conf

  4. Query SQL untuk mendapatkan daftar hierarki supervisor. karyawan --> supervisor --> supervisor

  5. Bergabunglah dengan 2 tabel di mana dua set angka tumpang tindih dalam kolom yang bergabung