Najpierw rozważ mój komentarz.
Postgres do wersji 9.4 włącznie nie rejestruje znaczników czasu, kiedy wiersze zostały wstawione lub zaktualizowane.
W nagłówkach wierszy znajduje się kilka kolumn systemowych które mogą pomóc w pracy kryminalistycznej. Fizyczna kolejność wierszy (ctid
) może być wskaźnikiem, jeśli od tego czasu nic się nie stało ze stołem. W prostych przypadkach nowe wiersze są dołączane do fizycznego końca tabeli podczas wstawiania, więc ctid
wskazuje, co zostało wstawione jako ostatnie - dopóki nic się nie zmieni w tabeli. Postgres może dowolnie zmieniać fizyczną kolejność wierszy, na przykład za pomocą VACUUM
. Dowolna UPDATE
pisze również nową wersję wiersza, która może zmienić fizyczną pozycję. Nowa wersja nie musi być na końcu tabeli. Postgres stara się zachować nową wersję wiersza na tej samej stronie danych, jeśli to możliwe (GORĄCA aktualizacja
) ...
To powiedziawszy, oto proste zapytanie, aby uzyskać fizycznie ostatnie wiersze dla danej tabeli:
SELECT ctid, *
FROM big
ORDER BY ctid DESC
LIMIT 10;
Powiązane odpowiedzi na dba.SE ze szczegółowymi informacjami:
Wstaw identyfikator transakcji xmin
może się przydać:
Jeśli zdarzy ci się mieć kopię zapasową dla testowej bazy danych tuż przed incydentem, byłoby być pomocnym. Przywróć stary stan do oddzielnego schematu testowej bazy danych i porównaj tabele ...
Zazwyczaj dodaję jeden lub dwa timestamptz
kolumny do ważnych tabel, kiedy wiersz został wstawiony i / lub kiedy był aktualizowany po raz ostatni. To by być teraz niezwykle użytecznym...
Co by również dla Ciebie:funkcje "temporal" wprowadzone w standardzie SQL z SQL:2011
. Ale to jeszcze nie jest zaimplementowane w Postgresie.
W Postgres Wiki jest strona .
Istnieje również nieoficjalne rozszerzenie na PGXN
. Nie testowałem tego i nie mogę powiedzieć, jak daleko jest.
Postgres 9,5 wprowadza funkcję rejestrowania sygnatur czasowych zatwierdzania (np. @Craig skomentował ). Należy włączyć ręcznie przed rozpoczęciem nagrywania.Instrukcja:
I kilka funkcji do współpracy.