PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment interroger les mises à jour incrémentielles de postgres depuis un point spécifié (un horodatage ou un identifiant de transaction) ?

Ce que vous voulez vraiment, c'est le décodage logique de PostgreSQL 9.4. support, qui vous permet d'extraire un flux de modifications du serveur. Pour l'utiliser, vous avez besoin d'un plug-in de décodage logique qui transforme le flux de modifications sur le serveur en quelque chose que votre application peut consommer. Il y en a un certain nombre en développement, mais c'est encore assez tôt.

Puisque vous avez noté dans un commentaire que vous utilisiez AWS RDS, vous n'avez pas de chance pour le moment, car RDS au moment de la rédaction n'offre aucun plug-in de décodage et vous auriez besoin de privilèges de superutilisateur pour les installer.

Vous ne pouvez pas utiliser xmin et xmax pour une copie incrémentielle complète, car vous ne pouvez pas effectuer de lectures erronées dans PostgreSQL, vous ne pouvez donc pas voir si un tuple a été DELETE ré. Pour utiliser les ID de transaction, vous devez empêcher VACUUM de supprimer les lignes "mortes", c'est-à-dire les lignes qu'aucune transaction en cours n'a encore besoin d'exécuter correctement. Vous devez également être capable de faire des lectures sales. Aucun de ceux-ci n'a de solution simple dans PostgreSQL.

Si vous avez des tableaux d'insertion uniquement (ou vous effectuez des insertions et des mises à jour, ne supprimez jamais et ne modifiez jamais la clé primaire d'une ligne), vous pouvez éventuellement utiliser la transaction xmin. Vous devrez faire face à transaction-id wraparound en vérifiant pg_database.datfrozenxid et pg_class.relfrozenxid pour la relation d'intérêt. Voir le code source et les commentaires dans le code pour plus de détails. VACUUM et l'absence de lectures modifiées n'est pas un problème si vous ne supprimez jamais une entrée, puisque vous n'avez pas besoin de voir les lignes "disparues".

Utilisez le décodage logique dans 9.4+ si possible. Pour les anciennes versions, si vous avez besoin d'une réplication complète, vous devez accumuler une file d'attente de modifications avec des déclencheurs.

Si vous pouvez interdire complètement les suppressions et les modifications de clé primaire, vous pouvez utiliser xmin pour trouver les lignes modifiées, à condition de veiller à ce qu'il n'y ait pas de delete s run, ou toute update s qui changent la primary key s.