sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan viser du alle tabeller med dataændringer inden for de seneste 24 timer?

Overvej først min kommentar.

Postgres til og med 9.4 registrerer ikke i sig selv tidsstempler, når rækker blev indsat eller opdateret.

Der er nogle systemkolonner i rækkeoverskrifterne der kan hjælpe i det retsmedicinske arbejde. Den fysiske rækkefølge af rækker (ctid ) kan være en indikator, hvis der ikke er sket andet med bordet siden. I simple tilfælde tilføjes nye rækker til den fysiske ende af en tabel, når de indsættes, så ctid angiver, hvad der blev indsat sidst - indtil noget ændres i tabellen. Postgres kan frit omarrangere den fysiske rækkefølge af rækker efter eget ønske, for eksempel med VACUUM . Enhver UPDATE skriver også en ny rækkeversion, som kan ændre den fysiske position. Den nye version behøver ikke at være for enden af ​​tabellen. Postgres forsøger at beholde ny rækkeversion på den samme dataside, hvis det er muligt (VARM opdatering ) ...

Når det er sagt, er her en simpel forespørgsel for at få den fysisk sidste rækker for en given tabel:

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

Relaterede svar på dba.SE med detaljerede oplysninger:

Indsæt transaktions-id'et xmin kan være nyttigt:

Hvis du tilfældigvis har en backup for test-DB fra lige før hændelsen, ville være hjælpsom. Gendan den gamle tilstand til et separat skema af test-DB og sammenlign tabeller ...

Typisk tilføjer jeg en eller to timestamptz kolonner til vigtige tabeller for, hvornår rækken blev indsat, og/eller hvornår den blev opdateret sidste gang. Det ville være enormt nyttig for dig lige nu ...

Hvad ville også være fantastisk for dig:"temporal"-funktionerne introduceret i SQL-standarden med SQL:2011 . Men det er ikke implementeret i Postgres endnu.
Der er en side i Postgres Wiki .
Der er også en uofficiel udvidelse på PGXN . Jeg har ikke testet det og kan ikke sige, hvor langt det er.

Postgres 9.5 introducerer en funktion til at optage tidsstempler for forpligtelse (som @Craig kommenterede ). Skal aktiveres manuelt, før det begynder at optage.Manualen:

Og nogle funktioner til at arbejde med det.




  1. Det er i detaljerne

  2. Få advarsel:Nulværdi elimineres af en samlet eller anden SET-operation

  3. Sådan opgraderes fra MariaDB 10.4 til MariaDB 10.5

  4. pqxx genbrug / genaktiver en arbejdstransaktion