Datum der letzten Änderung einer Tabelle [erledigt]

Hier dreht es sich um den PostGre Server

Moderator: Moderatoren

Antworten
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Datum der letzten Änderung einer Tabelle [erledigt]

Beitrag von Klaus Schuster »

Moin Leute,

kennt jemand eine Möglichkeit herauszufinden wann eine Tabelle in postGreSQL zuletzt geändert wurde?
Zuletzt geändert von Klaus Schuster am Fr, 24. Apr 2020 14:18, insgesamt 1-mal geändert.
Gruß Klaus
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Datum der letzten Änderung einer Tabelle

Beitrag von ramses »

Hallo Klaus

ja die gibt es.

Als erstes prüfen dass in deiner postgresql.conf Datei die Zeile

Code: Alles auswählen

track_commit_timestamp = on	# collect timestamp of transaction commit
				# (change requires restart)
Aktiviert ist. Wenn nein --> ändern und Server Neu Starten
Nur wenn dieser Eintrag auf ON ist werden Timestamps gesammelt und können auch abgefragt werden.

Die Abfrage geht mit:

Code: Alles auswählen

SELECT pg_xact_commit_timestamp(xmin), * FROM  TABELLEN_NAME  where pg_xact_commit_timestamp(xmin) is not null ORDER BY pg_xact_commit_timestamp DESC LIMIT 1;
Valar Morghulis

Gruss Carlo
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: Datum der letzten Änderung einer Tabelle

Beitrag von Klaus Schuster »

Danke Carlo, funktioniert nach einem Neustart des Rechners super! Den PgAdmin allein neu zu starten hat nicht ausgereicht.
Gruß Klaus
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Datum der letzten Änderung einer Tabelle [erledigt]

Beitrag von Werner_Bayern »

PG-Dienst Neustart hätte gereicht. 8)
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: Datum der letzten Änderung einer Tabelle [erledigt]

Beitrag von Klaus Schuster »

Ja Werner, muss ich den über die Dienste starten, oder gibt es dafür eine Möglichkeit im PgAdmin?

Anbei zwei Methoden um die letzte Änderung eines Datensatzes oder einer Tabelle abfragen zu können.

Code: Alles auswählen

METHOD SQL:LetzteAenderungSatz( cTabelle, cSatz )
   LOCAL aLetzteAenderung := ::Select_Array( "SELECT pg_xact_commit_timestamp(xmin) FROM " + cTabelle + " WHERE " + cSatz + " AND pg_xact_commit_timestamp(xmin) IS NOT NULL ORDER BY pg_xact_commit_timestamp DESC LIMIT 1" )

RETURN( IIf( IsArray( aLetzteAenderung ), aLetzteAenderung[1][1], NIL ))



METHOD SQL:LetzteAenderungTabelle( cTabelle )
   LOCAL aLetzteAenderung := ::Select_Array( "SELECT pg_xact_commit_timestamp(xmin) FROM " + cTabelle + " WHERE pg_xact_commit_timestamp(xmin) IS NOT NULL ORDER BY pg_xact_commit_timestamp DESC LIMIT 1" )

RETURN( IIf( IsArray( aLetzteAenderung ), aLetzteAenderung[1][1], NIL ))
Beispiel für Änderungszeitpunk eines Datensatz:

cTimeStampLetzteAenderung := ::oSession:LetzteAenderungSatz( 'anreden', 'anr_id = 1' )
Gruß Klaus
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Datum der letzten Änderung einer Tabelle [erledigt]

Beitrag von HaPe »

Hallo Klaus !
Ja Werner, muss ich den über die Dienste starten, oder gibt es ...
Ich mach das bei allen SQL-Servern immer über Batch-Files:
netstopPG10.bat:
sc stop postgresql-x64-10
sc stop pgAgent
sc stop pgbouncer

und starten mit netstartPG10.bat:
sc start pgbouncer
sc start pgAgent
sc start postgresql-x64-10
--
Hans-Peter
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: Datum der letzten Änderung einer Tabelle [erledigt]

Beitrag von Klaus Schuster »

Danke Hans-Peter.
Gruß Klaus
Benutzeravatar
Klaus Schuster
Foren-Administrator
Foren-Administrator
Beiträge: 366
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth
Hat sich bedankt: 9 Mal
Danksagung erhalten: 9 Mal

Re: Datum der letzten Änderung einer Tabelle [erledigt]

Beitrag von Klaus Schuster »

Erkenntnis: Dadurch das es möglich ist die letzten Änderung eines Datensatz abfragen zu können, kann man sich ein entsprechendes TimeStamp-Feld in der Tabelle sparen.
Gruß Klaus
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: Datum der letzten Änderung einer Tabelle [erledigt]

Beitrag von Marcus Herz »

Hi

Ich bin mir nicht sicher, ob du durch die Aktivierung der Transactions Timestamp nicht einen internen Overhaed erzeugst.
Laut Doku ist für deinen Fall eine Spalte timestamp jedenfalls performanter.
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Datum der letzten Änderung einer Tabelle [erledigt]

Beitrag von Werner_Bayern »

Klaus Schuster hat geschrieben: Fr, 24. Apr 2020 15:00 Ja Werner, muss ich den über die Dienste starten, oder gibt es dafür eine Möglichkeit im PGAdmin?
Ja: Rechtsklick auf den Server und dann Reload Configuration. Dazu gibt's auch eine PG-Funktion: pg_reload_conf() - also

Code: Alles auswählen

select pg_reload_conf()
es grüßt

Werner

<when the music is over, turn off the lights!>
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Datum der letzten Änderung einer Tabelle [erledigt]

Beitrag von ramses »

Hallo Werner

Nein.

Code: Alles auswählen

select pg_reload_conf()
Reicht dazu nicht aus. Es muss ein Neustart des Services/Servers sein. Wie es auch in der conf steht "# (change requires restart)" Nur so werden einige der möglichen änderungen in der postgresql.conf auch ausgeführt.
z.B. mit:

Code: Alles auswählen

service postgresql restart
(FreeBSD)
Oder vergleichbares unter Windows
Valar Morghulis

Gruss Carlo
Antworten