PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie listet man alle Tabellen mit Datenänderungen in den letzten 24 Stunden auf?

Denken Sie zuerst an meinen Kommentar.

Postgres bis einschließlich 9.4 zeichnet selbst keine Zeitstempel auf, wenn Zeilen eingefügt oder aktualisiert wurden.

Es gibt einige Systemspalten in den Zeilenüberschriften das kann bei der forensischen Arbeit helfen. Die physische Reihenfolge der Zeilen (ctid ) kann ein Indikator sein, wenn seitdem nichts mehr mit dem Tisch passiert ist. In einfachen Fällen werden neue Zeilen beim Einfügen an das physikalische Ende einer Tabelle angehängt, also die ctid zeigt an, was zuletzt eingefügt wurde - bis sich an der Tabelle etwas ändert. Postgres kann die physische Reihenfolge der Zeilen nach Belieben neu anordnen, zum Beispiel mit VACUUM . Beliebiges UPDATE schreibt auch eine neue Zeilenversion, die die physische Position ändern kann. Die neue Version muss nicht am Ende der Tabelle stehen. Postgres versucht, neue Zeilenversionen möglichst auf derselben Datenseite zu halten (HOT-Update ) ...

Das heißt, hier ist eine einfache Abfrage, um die physisch zu erhalten letzten Zeilen für eine gegebene Tabelle:

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

Verwandte Antworten auf dba.SE mit detaillierten Informationen:

Die eingefügte Transaktions-ID xmin kann nützlich sein:

Falls Sie zufällig ein Backup haben für die Test-DB direkt vor dem Vorfall, das würde sei hilfreich. Stellen Sie den alten Zustand in einem separaten Schema der Test-DB wieder her und vergleichen Sie die Tabellen ...

Normalerweise füge ich ein oder zwei timestamptz hinzu Spalten zu wichtigen Tabellen, wann die Zeile eingefügt wurde und / oder wann sie das letzte Mal aktualisiert wurde. Das würde gerade jetzt enorm nützlich für Sie sein ...

Was würde Auch toll für Sie:die im SQL-Standard mit SQL eingeführten "temporalen" Features:2011 . Aber das ist noch nicht in Postgres implementiert.
Es gibt eine Seite im Postgres-Wiki .
Es gibt auch eine inoffizielle Erweiterung für PGXN . Ich habe es nicht getestet und kann nicht sagen, wie weit es ist.

Postgres 9.5 führt eine Funktion zum Aufzeichnen von Commit-Zeitstempeln ein (wie @Craig kommentierte ). Muss manuell aktiviert werden, bevor die Aufzeichnung beginnt.Das Handbuch:

Und einige Funktionen, um damit zu arbeiten.