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

Bagaimana cara menanyakan pembaruan tambahan postgres sejak titik tertentu (stempel waktu atau id transaksi)?

Yang Anda inginkan adalah decoding logis dari PostgreSQL 9.4 dukungan, yang memungkinkan Anda mengekstrak aliran perubahan dari server. Untuk menggunakannya, Anda memerlukan plugin decoding logis yang mengubah aliran perubahan di server menjadi sesuatu yang dapat digunakan oleh aplikasi Anda. Ada beberapa yang sedang dikembangkan, tapi ini masih cukup awal.

Karena Anda mencatat dalam komentar bahwa Anda menggunakan AWS RDS, saat ini Anda kurang beruntung, karena RDS pada saat penulisan tidak menawarkan plugin decoding apa pun dan Anda memerlukan hak pengguna super untuk menginstalnya.

Anda tidak dapat menggunakan xmin dan xmax untuk penyalinan inkremental lengkap, karena Anda tidak dapat melakukan pembacaan kotor di PostgreSQL, jadi Anda tidak dapat melihat apakah Tuple telah DELETE d. Untuk menggunakan ID transaksi, Anda harus mencegah VACUUM dari menghapus baris "mati", yaitu baris yang tidak perlu dilakukan transaksi saat ini dengan benar. Anda juga harus bisa melakukan pembacaan kotor. Tak satu pun dari mereka memiliki solusi mudah di PostgreSQL.

Jika Anda memiliki tabel hanya sisipkan (atau Anda menyisipkan dan memperbarui, tidak pernah menghapus, dan tidak pernah mengubah kunci utama suatu baris) maka Anda mungkin dapat menggunakan xmin transaksi. Anda harus berurusan dengan transaction-id wraparound dengan mencentang pg_database.datfrozenxid dan pg_class.relfrozenxid untuk hubungan kepentingan. Lihat kode sumber dan komentar dalam kode untuk detailnya. VACUUM dan kurangnya pembacaan kotor tidak menjadi masalah jika Anda tidak pernah menghapus entri, karena Anda tidak perlu melihat baris "hilang".

Gunakan decoding logis di 9.4+ jika memungkinkan. Untuk versi yang lebih lama, jika Anda memerlukan replikasi lengkap, Anda perlu mengakumulasi antrian perubahan dengan pemicu.

Jika Anda dapat melarang penghapusan dan perubahan kunci utama sepenuhnya, Anda dapat menggunakan xmin untuk menemukan baris yang diubah, selama Anda berhati-hati untuk memastikan tidak ada delete s dijalankan, atau update s yang mengubah primary key s.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Setara dengan PostgreSQL untuk SQL Server GROUP BY WITH ROLLUP

  2. Header kolom dinamis Postgres (dari tabel lain)

  3. psql:FATAL:tidak dapat membuka basis file/11951/11717:Sistem file hanya-baca

  4. Cara membuat fungsi yang tidak menghasilkan apa-apa

  5. Bagaimana cara kerja COPY dan mengapa ini jauh lebih cepat daripada INSERT?