Ini banyak lebih efisien untuk menyetel zona waktu untuk sesi impor Anda daripada memperbarui nilainya nanti.
Saya mendapat kesan bahwa Anda menganggap zona waktu seperti pengaturan yang berlaku untuk nilai yang tidak berubah dalam tabel. Tapi itu tidak seperti itu sama sekali. Anggap saja sebagai pengubah input / output. timestamp
ual yang sebenarnya nilai (dengan atau tanpa zona waktu) selalu disimpan sebagai stempel waktu UTC secara internal (jumlah detik sejak '2000-01-01 00:00'
). Lebih banyak detail:
UPDATE
dalam contoh kedua Anda menggandakan ukuran tabel, karena setiap baris tidak valid dan versi baru ditambahkan (begitulah UPDATE
bekerja dengan MVCC
di Postgres). Selain operasi yang mahal, VACUUM
harus melakukan lebih banyak pekerjaan nanti untuk membersihkan meja yang mengasapi. Sangat tidak efisien.
Ini sangat aman untuk SET
zona waktu lokal untuk sesi tersebut. Ini tidak memengaruhi operasi bersamaan dengan cara apa pun. BTW, SET SESSION
sama dengan SET
biasa karena SESSION
adalah default.
Jika Anda ingin menjadi benar-benar tentu, Anda dapat membatasi pengaturan untuk transaksi saat ini dengan SET LOCAL
. Saya mengutip manual di sini
Satukan:
BEGIN;
SET LOCAL timezone = 'UTC';
COPY tabledata FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;
COMMIT;
Periksa:
SHOW timezone;