Det, du virkelig ønsker, er PostgreSQL 9.4's logiske afkodning support, som lader dig udtrække en ændringsstrøm fra serveren. For at bruge det har du brug for et logisk afkodningsplugin, der gør ændringsstrømmen på serveren til noget, din app kan forbruge. Der er en række under udvikling, men det er stadig ret tidligt.
Da du i en kommentar bemærkede, at du bruger AWS RDS, er du på nuværende tidspunkt uheldig, da RDS i skrivende stund ikke tilbyder nogen afkodningsplugins, og du skal bruge superbrugerrettigheder for at installere dem.
Du kan ikke bruge xmin og xmax til fuldstændig inkrementel kopiering, fordi du ikke kan lave dirty reads i PostgreSQL, så du kan ikke se, om en tuple er blevet DELETE
d. For at bruge transaktions-id'er skal du forhindre VACUUM
fra at fjerne "døde" rækker, dvs. rækker, som ingen aktuel transaktion stadig skal udføre korrekt. Du skal også være i stand til at lave beskidte læsninger. Ingen af disse har nemme løsninger i PostgreSQL.
Hvis du har tabeller, der kun kan indsættes (eller du laver indsættelser og opdateringer, sletter aldrig og ændrer aldrig den primære nøgle i en række) så kan du eventuelt bruge transaktionen xmin. Du bliver nødt til at håndtere transaction-id wraparound
ved at tjekke pg_database.datfrozenxid
og pg_class.relfrozenxid
for interesseforholdet. Se kildekoden og kommentarerne i koden for detaljer. VACUUM
og manglen på beskidte læsninger er ikke et problem, hvis du aldrig sletter en post, da du ikke behøver at se "forsvundne" rækker.
Brug logisk afkodning i 9.4+, hvis det er muligt. For ældre versioner, hvis du har brug for fuldstændig replikering, skal du akkumulere en ændringskø med triggere.
Hvis du kan forbyde sletninger og ændringer af primær nøgle fuldstændigt, kan du bruge xmin
for at finde ændrede rækker, så længe du sørger for at sikre, at der ikke er nogen delete
s køre, eller en hvilken som helst update
s, der ændrer primary key
s.