Đó là rất nhiều hiệu quả hơn để đặt múi giờ cho phiên nhập của bạn hơn là cập nhật các giá trị sau đó.
Tôi có ấn tượng rằng bạn nghĩ về múi giờ giống như một cài đặt áp dụng cho các giá trị không thay đổi trong bảng. Nhưng hoàn toàn không phải như vậy. Hãy coi nó như một công cụ sửa đổi đầu vào / đầu ra. timestamp
thực tế giá trị (có hoặc không có múi giờ) là luôn luôn được lưu trữ dưới dạng dấu thời gian UTC trong nội bộ (số giây kể từ '2000-01-01 00:00'
). Nhiều chi tiết hơn:
UPDATE
trong ví dụ thứ hai của bạn tăng gấp đôi kích thước của bảng, vì mọi hàng đơn lẻ đều không hợp lệ và một phiên bản mới được thêm vào (đó là cách UPDATE
hoạt động với MVCC
trong Postgres). Ngoài hoạt động tốn kém, VACUUM
sẽ phải làm thêm công việc sau đó để dọn dẹp bàn ăn. Rất kém hiệu quả.
Nó hoàn toàn an toàn thành SET
múi giờ địa phương cho phiên. Điều này không ảnh hưởng đến các hoạt động đồng thời theo bất kỳ cách nào. BTW, SET SESSION
giống với SET
đơn giản bởi vì SESSION
vẫn là mặc định.
Nếu bạn muốn trở thành hoàn toàn chắc chắn, bạn có thể giới hạn cài đặt cho giao dịch hiện tại với SET LOCAL
. Tôi trích dẫn hướng dẫn sử dụng tại đây
Kết hợp với nhau:
BEGIN;
SET LOCAL timezone = 'UTC';
COPY tabledata FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;
COMMIT;
Kiểm tra:
SHOW timezone;