Postgres 9.5 đã giới thiệu một tính năng mới liên quan đến vấn đề này: dấu thời gian cam kết .
Bạn chỉ cần kích hoạt track_commit_timestamp
trong postgresql.conf
(và khởi động lại!) để bắt đầu theo dõi dấu thời gian cam kết. Sau đó, bạn có thể truy vấn:
SELECT * FROM tbl
WHERE pg_xact_commit_timestamp(xmin) >= '2015-11-26 18:00:00+01';
Đọc chương "Cam kết theo dõi dấu thời gian"
trong Postgres Wiki.
Tiện ích có liên quan các chức năng trong sách hướng dẫn
.
Độ biến động của hàm chỉ là VOLATILE
vì ID giao dịch (xid
) có thể quấn quanh mỗi định nghĩa. Vì vậy, bạn không thể tạo chỉ mục chức năng trên đó.
Bạn có thể giả mạo IMMUTABLE
sự biến động trong trình bao bọc chức năng cho các ứng dụng trong một khung thời gian giới hạn, nhưng bạn cần lưu ý các tác động. Trường hợp liên quan có giải thích thêm:
- PostgreSQL có hỗ trợ "giọng không nhạy cảm không "đối chiếu?
- Làm cách nào để các từ khóa NGAY LẬP TỨC, ỔN ĐỊNH và VOLATILE ảnh hưởng đến hoạt động của chức năng?
Đối với nhiều trường hợp sử dụng (như trường hợp của bạn?) Chỉ quan tâm đến trình tự cam kết (và không phải thời gian tuyệt đối), có thể hiệu quả hơn khi làm việc với xmin
truyền tới bigint
"trực tiếp" (xmin::text::bigint
) thay vì dấu thời gian cam kết. (xid
là một số nguyên không dấu bên trong, nửa trên không khớp với một số nguyên integer
có dấu .) Một lần nữa, hãy lưu ý các hạn chế do có thể xảy ra xung quanh xid.
Vì lý do tương tự, dấu thời gian cam kết không được lưu giữ vô thời hạn . Đối với cơ sở dữ liệu vừa và nhỏ, xid
sự bao bọc hầu như không bao giờ xảy ra - nhưng nó sẽ xảy ra cuối cùng nếu cụm tồn tại đủ lâu. Đọc chương "Ngăn ngừa lỗi bao trùm ID giao dịch" trong sách hướng dẫn để biết chi tiết.