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

Comment répertorier toutes les tables avec des modifications de données au cours des dernières 24 heures ?

Considérez d'abord mon commentaire.

Postgres jusqu'à 9.4 inclus n'enregistre pas par lui-même les horodatages lorsque les lignes ont été insérées ou mises à jour.

Il y a quelques colonnes système dans les en-têtes de ligne qui peuvent aider dans le travail médico-légal. L'ordre physique des lignes (ctid ) peut être un indicateur si rien d'autre n'est arrivé à la table depuis. Dans les cas simples, de nouvelles lignes sont ajoutées à la fin physique d'une table lorsqu'elles sont insérées, donc le ctid indique ce qui a été inséré en dernier - jusqu'à ce que quelque chose change dans le tableau. Postgres est libre de réorganiser l'ordre physique des lignes à volonté, par exemple avec VACUUM . Toute UPDATE écrit également une nouvelle version de ligne, qui peut modifier la position physique. La nouvelle version n'a pas besoin d'être à la fin du tableau. Postgres essaie de conserver la nouvelle version de ligne sur la même page de données si possible (Mise à jour à chaud ) ...

Cela dit, voici une requête simple pour obtenir le physiquement dernières lignes d'une table donnée :

SELECT ctid, *
FROM   big
ORDER  BY ctid DESC
LIMIT  10;

Réponses associées sur dba.SE avec des informations détaillées :

L'ID de transaction d'insertion xmin peut être utile :

S'il vous arrive d'avoir une sauvegarde pour la base de données de test juste avant l'incident, cela serait soit utile. Restaurez l'ancien état dans un schéma séparé de la base de données de test et comparez les tables ...

Typiquement, j'ajoute un ou deux timestamptz colonnes aux tables importantes pour savoir quand la ligne a été insérée et / ou quand elle a été mise à jour la dernière fois. Cela serait être extrêmement utile pour vous en ce moment ...

Qu'est-ce que ferait seront également formidables pour vous :les fonctionnalités "temporales" introduites dans le standard SQL avec SQL :2011 . Mais ce n'est pas encore implémenté dans Postgres.
Il y a une page dans le Wiki Postgres .
Il existe également une extension non officielle sur PGXN . Je ne l'ai pas testé et je ne peux pas dire à quel point il est.

Postgres 9.5 introduit une fonctionnalité pour enregistrer les horodatages de validation (comme @Craig a commenté ). Doit être activé manuellement avant de commencer l'enregistrement.Le manuel :

Et quelques fonctions pour travailler avec.