Postgres 9.5 memperkenalkan fitur baru yang terkait dengan masalah ini:commit timestamps .
Anda hanya perlu mengaktifkan track_commit_timestamp
di postgresql.conf
(dan mulai ulang!) untuk mulai melacak stempel waktu komit. Kemudian Anda dapat menanyakan:
SELECT * FROM tbl
WHERE pg_xact_commit_timestamp(xmin) >= '2015-11-26 18:00:00+01';
Baca bab "Melakukan pelacakan stempel waktu"
di Wiki Postgres.
Utilitas yang terkait fungsi dalam manual
.
Volatilitas fungsi hanya VOLATILE
karena ID transaksi (xid
) dapat membungkus per definisi. Jadi Anda tidak dapat membuat indeks fungsional di atasnya.
Anda bisa memalsukan IMMUTABLE
volatilitas dalam pembungkus fungsi untuk aplikasi dalam kerangka waktu terbatas, tetapi Anda harus menyadari implikasinya. Kasus terkait dengan penjelasan lebih lanjut:
- Apakah PostgreSQL mendukung "aksen tidak sensitif " koleksi?
- Bagaimana kata kunci IMMUTABLE, STABLE, dan VOLATILE memengaruhi perilaku fungsi?
Untuk banyak kasus penggunaan (seperti milik Anda?) yang hanya tertarik pada urutan komit (dan bukan waktu absolut), mungkin lebih efisien untuk bekerja dengan xmin
dilemparkan ke bigint
"langsung" (xmin::text::bigint
) alih-alih melakukan stempel waktu. (xid
adalah bilangan bulat yang tidak ditandatangani secara internal, bagian atas yang tidak cocok dengan integer
yang ditandatangani .) Sekali lagi, waspadai keterbatasan karena kemungkinan sampul xid.
Untuk alasan yang sama, stempel waktu komit tidak dipertahankan tanpa batas waktu . Untuk database kecil hingga menengah, xid
sampul hampir tidak pernah terjadi - tetapi pada akhirnya akan terjadi jika cluster hidup cukup lama. Baca bab "Mencegah Kegagalan Penutupan ID Transaksi" di manual untuk detailnya.