PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да заявите postgres инкрементални актуализации от определена точка (клеймо за време или идентификатор на транзакция)?

Това, което наистина искате, е логическото декодиране на PostgreSQL 9.4 поддръжка, която ви позволява да извлечете поток за промяна от сървъра. За да го използвате, имате нужда от плъгин за логическо декодиране, който превръща потока от промени на сървъра в нещо, което приложението ви може да използва. Има редица в процес на разработка, но все още е доста рано.

Тъй като отбелязахте в коментар, че използвате AWS RDS, в момента нямате късмет, тъй като RDS към момента на писане не предлага никакви добавки за декодиране и ще ви трябват привилегии на суперпотребител, за да ги инсталирате.

Не можете да използвате xmin и xmax за пълно инкрементално копиране, защото не можете да правите мръсни четения в PostgreSQL, така че не можете да видите дали даден кортеж е бил DELETE д. За да използвате идентификатори на транзакции, трябва да предотвратите VACUUM от премахване на "мъртви" редове, т.е. редове, които нито една текуща транзакция все още не трябва да изпълнява правилно. Също така ще трябва да можете да правите мръсни четения. Нито един от тях няма лесни решения в PostgreSQL.

Ако имате таблици само за вмъкване (или правите вмъквания и актуализации, никога не изтривате и никога не променяте първичния ключ на ред), тогава можете евентуално да използвате транзакцията xmin. Ще трябва да се справите с transaction-id wraparound като проверите pg_database.datfrozenxid и pg_class.relfrozenxid за лихвеното отношение. Вижте изходния код и коментарите в кода за подробности. VACUUM и липсата на мръсни четения не е проблем, ако никога не изтриете запис, тъй като не е необходимо да виждате "изчезнали" редове.

Използвайте логическо декодиране в 9.4+, ако е възможно. За по-стари версии, ако имате нужда от пълна репликация, трябва да натрупате опашка за промяна с тригери.

Ако можете да забраните напълно изтриванията и промените на първичния ключ, можете да използвате xmin за намиране на променени редове, стига да сте сигурни, че няма delete или всяка update които променят primary key с.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql regexp_replace

  2. как да поставим префикс на низ преди последователност, генерирана от postgresql?

  3. NodeJS/Knex Създаване на Json отговор

  4. Как да създадете SQL масив от Java List?

  5. Ред на логическа обработка или SQL стандарт в клаузата WHERE