To, co opravdu chcete, je logické dekódování PostgreSQL 9.4 podporu, která vám umožní extrahovat tok změn ze serveru. Chcete-li jej použít, potřebujete plugin pro logické dekódování, který změní stream změn na serveru na něco, co může vaše aplikace spotřebovat. Existuje řada ve vývoji, ale je to ještě docela brzy.
Protože jste v komentáři uvedli, že používáte AWS RDS, v tuto chvíli máte smůlu, protože RDS v době psaní tohoto článku nenabízí žádné dekódovací pluginy a k jejich instalaci byste potřebovali oprávnění superuživatele.
Pro úplné přírůstkové kopírování nemůžete použít xmin a xmax, protože v PostgreSQL nemůžete provádět špinavé čtení, takže nemůžete vidět, zda byla n-tice DELETE
d. Chcete-li používat ID transakcí, musíte zabránit VACUUM
z odstranění „mrtvých“ řádků, tedy řádků, které žádná aktuální transakce ještě nemusí správně provést. Také byste museli umět špinavé čtení. Ani jeden z nich nemá v PostgreSQL snadná řešení.
Pokud máte tabulky pouze pro vkládání (nebo vložíte a aktualizujete, nikdy neodstraníte a nikdy nezměníte primární klíč řádku), pak můžete případně použít transakci xmin. Budete se muset vypořádat s obtékáním ID transakce
zaškrtnutím pg_database.datfrozenxid
a pg_class.relfrozenxid
pro zájmový vztah. Podrobnosti naleznete ve zdrojovém kódu a komentářích v kódu. VACUUM
a nedostatek špinavých čtení není problém, pokud nikdy neodstraníte položku, protože nepotřebujete vidět „zmizelé“ řádky.
Pokud je to možné, použijte logické dekódování ve verzi 9.4+. U starších verzí, pokud potřebujete úplnou replikaci, musíte shromáždit frontu změn se spouštěči.
Pokud můžete zcela zakázat mazání a změny primárního klíče, můžete použít xmin
najít změněné řádky, pokud se postaráte o to, aby nedošlo k delete
spuštění nebo jakékoli update
které mění primary key
s.