PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Setel nilai SERIAL secara atom saat melakukan transaksi

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:

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana mengkonversi integer ke string dan mendapatkan panjang string

  2. Fungsi pemicu PostgreSQL 9.3 untuk dimasukkan ke dalam tabel dengan nama parameter

  3. Menggabungkan dua tabel dalam kueri yang kompleks (bukan data yang seragam)

  4. postgresql malformed array literal dalam membuat initcond agregat

  5. SUM() Fungsi di PostgreSQL