Giải pháp đề xuất của bạn là đúng. Hay chính xác hơn, nó là một trong một số cách triển khai đúng. Bất kỳ cách nào sau đây sẽ hoạt động:
- Lưu trữ dấu thời gian UTC trong một trường, lưu trữ giá trị chênh lệch trong trường khác.
- Lưu trữ dấu thời gian địa phương trong một trường, lưu trữ phần bù vào trường khác.
- Lưu trữ
date
cục bộ trong một trường và lưu trữtime with time zone
trong cái khác. (mặc dùtime with time zone
nói chung là không khuyến khích ...) - Lưu trữ dấu thời gian UTC trong một trường và dấu thời gian cục bộ trong một trường khác.
Cách dễ nhất cho đến nay là cái đầu tiên mà bạn đã đề xuất.
Tôi không muốn lưu trữ dấu thời gian trong text
vì chúng có xu hướng không được tìm kiếm hiệu quả.
Cũng lưu ý - nếu bạn đến từ nền SQL Server, bạn có thể nhớ lại datetimeoffset
của nó nhập, lưu trữ ngày giờ cục bộ và độ lệch trong trường và sử dụng UTC tương đương trong quá trình lập chỉ mục. Người ta thường nghĩ rằng dấu thời gian timestamp with time zone
sẽ có hành vi tương tự, nhưng họ không. Họ chỉ sử dụng phiên múi giờ để chuyển đổi sang / từ UTC. SQL Server không có khái niệm về múi giờ phiên và do đó có sự khác biệt.
Hãy nhớ đọc phần này của tài liệu Postgres .