sql >> Database >  >> RDS >> PostgreSQL

Hoe een lijst van alle tabellen met gegevenswijzigingen in de afgelopen 24 uur?

Overweeg eerst mijn opmerking.

Postgres tot en met 9.4 registreert zelf geen tijdstempels wanneer rijen werden ingevoegd of bijgewerkt.

Er zijn enkele systeemkolommen in de rijkoppen dat kan helpen bij het forensische werk. De fysieke volgorde van rijen (ctid ) kan een indicator zijn als er sindsdien niets meer met de tafel is gebeurd. In eenvoudige gevallen worden nieuwe rijen toegevoegd aan het fysieke einde van een tabel wanneer ze worden ingevoegd, dus de ctid geeft aan wat het laatst is ingevoegd - totdat er iets verandert in de tabel. Het staat Postgres vrij om de fysieke volgorde van rijen naar believen te herschikken, bijvoorbeeld met VACUUM . Elke UPDATE schrijft ook een nieuwe rijversie, die de fysieke positie kan veranderen. De nieuwe versie hoeft niet aan het einde van de tabel te staan. Postgres probeert indien mogelijk een nieuwe rijversie op dezelfde gegevenspagina te houden (HOT-update ) ...

Dat gezegd hebbende, hier is een eenvoudige vraag om de fysiek laatste rijen voor een bepaalde tabel:

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

Gerelateerde antwoorden op dba.SE met gedetailleerde informatie:

De transactie-ID invoegen xmin kan handig zijn:

Als u toevallig een back-up heeft voor de test-DB van vlak voor het incident, dat zou wees behulpzaam. Herstel de oude staat naar een apart schema van de test-DB en vergelijk tabellen ...

Meestal voeg ik een of twee timestamptz . toe kolommen naar belangrijke tabellen voor wanneer de rij is ingevoegd en/of wanneer deze de laatste keer is bijgewerkt. Dat zou nu enorm nuttig voor je zijn ...

Wat zou ook geweldig voor je zijn:de "temporal"-functies geïntroduceerd in de SQL-standaard met SQL:2011 . Maar dat is nog niet geïmplementeerd in Postgres.
Er is een pagina in de Postgres Wiki .
Er is ook een onofficiële extensie op PGXN . Ik heb het niet getest en kan niet zeggen hoe ver het is.

Postgres 9,5 introduceert een functie om tijdstempels vast te leggen (zoals @Craig heeft gereageerd ). Moet handmatig worden ingeschakeld voordat het begint met opnemen.De handleiding:

En enkele functies om ermee te werken.




  1. Hulp nodig bij perl-fout bij het gebruik van DBD::mysql

  2. Bovenste en onderste n rijen uitsluiten in SQL

  3. Kolom automatisch verhogen - Volgorde als standaardwaarde in Oracle

  4. SQL Server 2017:Beschikbare functies op Linux