sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur listar du alla tabeller med dataändringar under de senaste 24 timmarna?

Tänk först på min kommentar.

Postgres till och med 9.4 registrerar inte i sig tidsstämplar när rader infogades eller uppdaterades.

Det finns några systemkolumner i radrubrikerna som kan hjälpa till i det kriminaltekniska arbetet. Den fysiska ordningen på rader (ctid ) kan vara en indikator om inget annat har hänt med tabellen sedan dess. I enkla fall läggs nya rader till i den fysiska änden av en tabell när de infogas, så ctid indikerar vad som infogades sist - tills något ändras i tabellen. Postgres är fri att omarrangera den fysiska ordningen på rader efter behag, till exempel med VACUUM . Valfri UPDATE skriver också en ny radversion, som kan ändra den fysiska positionen. Den nya versionen behöver inte vara i slutet av tabellen. Postgres försöker behålla ny radversion på samma datasida om möjligt (HET uppdatering ) ...

Som sagt, här är en enkel fråga för att få den fysiskt sista raderna för en given tabell:

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

Relaterade svar på dba.SE med detaljerad information:

Infoga transaktions-id xmin kan vara användbart:

Om du råkar ha en säkerhetskopia för test-DB från precis före händelsen, det skulle var hjälpsam. Återställ det gamla tillståndet till ett separat schema för test-DB och jämför tabeller ...

Vanligtvis lägger jag till en eller två timestamptz kolumner till viktiga tabeller för när raden infogades och/eller när den uppdaterades senast. Det skulle vara oerhört användbar för dig just nu ...

Vad skulle är också bra för dig:de "temporal"-funktionerna som introduceras i SQL-standarden med SQL:2011 . Men det är inte implementerat i Postgres än.
Det finns en sida i Postgres Wiki .
Det finns också en inofficiell tillägg på PGXN . Jag har inte testat det och kan inte säga hur långt det är.

Postgres 9.5 introducerar en funktion för att spela in tidsstämplar för bekräftelse (som @Craig kommenterade ). Behöver aktiveras manuellt innan den börjar spela in.Manualen:

Och några funktioner för att fungera med det.




  1. Återställ efter fel i transaktionen

  2. Hur skapar man lagrade procedurer i SQL?

  3. Rails Console - Hitta var skapad vid =viss dag

  4. Hitta trasiga objekt i SQL Server