Tôi phải nhập dữ liệu không có thông tin múi giờ trong đó (tuy nhiên, tôi biết múi giờ cụ thể của dữ liệu tôi muốn nhập), nhưng tôi cần định dạng timestamp with time zone
trong cơ sở dữ liệu. Khi tôi nhập nó và đặt kiểu dữ liệu dấu thời gian thành timestamp with time zone
, Postgres sẽ tự động giả định rằng dữ liệu trong bảng là từ múi giờ của tôi và gán múi giờ của tôi cho nó. Thật không may dữ liệu tôi muốn nhập không phải là từ khung thời gian của tôi, vì vậy điều này không hoạt động.Thay đổi giá trị múi giờ của dữ liệu
Cơ sở dữ liệu cũng chứa dữ liệu với các múi giờ khác nhau. Tuy nhiên, múi giờ trong một bảng luôn giống nhau.
Bây giờ, tôi có thể đặt múi giờ của cơ sở dữ liệu thành múi giờ của dữ liệu tôi muốn nhập trước khi nhập dữ liệu (sử dụng lệnh SET time zone
) và thay đổi trở lại múi giờ của mình sau khi quá trình nhập hoàn tất và Tôi khá chắc chắn đã được lưu trữ dữ liệu sẽ không bị ảnh hưởng bởi sự thay đổi múi giờ của cơ sở dữ liệu. Nhưng điều này có vẻ là một cách tiếp cận khá bẩn và có thể gây ra vấn đề sau này.
Tôi tự hỏi liệu có cách nào thanh lịch hơn để chỉ định múi giờ cho việc nhập mà không có dữ liệu múi giờ trong chính dữ liệu không?
Ngoài ra, tôi chưa tìm thấy cách chỉnh sửa thông tin múi giờ sau khi nhập. Có cách nào không chuyển đổi, nhưng chỉ cần chỉnh sửa múi giờ cho toàn bộ bảng, giả sử rằng toàn bộ bảng có cùng một múi giờ bù đắp (tức là nếu một sai đã được gán khi nhập/nhập dữ liệu)?
Edit:
tôi quản lý để xác định một múi giờ sau khi nhập khẩu, lệnh toàn bộ con người:
set session time zone 'UTC';
COPY tbl FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;
set session time zone 'CET';
Dữ liệu sau đó được nhập khẩu bằng cách sử dụng múi giờ phiên. Tôi cho rằng điều này không ảnh hưởng đến bất kỳ truy vấn nào khác trên cơ sở dữ liệu cùng một lúc từ các kết nối khác?
Chỉnh sửa 2:
tôi phát hiện ra làm thế nào để thay đổi múi giờ của một bảng sau:
PostgreSQL update time zone offset
Tôi cho rằng đó là thanh lịch hơn để thay đổi múi giờ của bảng sau khi nhập khẩu sau đó sử dụng phiên để thay đổi múi giờ địa phương tạm thời. Giả sử toàn bộ bảng có cùng múi giờ.
Vì vậy, các mã sẽ là bây giờ cái gì dọc theo dòng:
COPY tbl FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;
UPDATE tbl SET <tstz_field> = <tstz_field> AT TIME ZONE '<correct_time_zone>';
How are you thực hiện nhập khẩu của bạn? bạn không thể chỉ định múi giờ trong khi nhập? – ertx
Cảm ơn mẹo, tôi đã cập nhật bài đăng nhưng tôi không chắc chắn loại múi giờ phiên hiệu ứng nào có trên các quy trình khác trong cơ sở dữ liệu tại thời điểm thực thi? – harbun