Gelöschte Datensätze wiederherstellen?

Hallo alle zusammen,

ich habe eine Tabelle in der ich verschiedene Werte eingebe. Leider musste ich gestern feststellen das ich per pgAdmin alle meine Inhalte gelöscht habe!
In meiner GUI sehe ich keinen Datensatz mehr aus dieser Tabelle.

Wenn ich aber per pgAdmin eine select abfrage ausführe sehe ich alle meine Daten in der Tabelle.

Habe diesbezüglich gelesen, dass die Inhalte per Delete nur ausgeblendet werden?

Könnte ich diese vielleicht doch wiederherstellen?

Danke für eure Hilfe.

Ja, spiel das Backup ein :wink:

Im Ernst: Datensätze haben 2 versteckte Felder: xmin und xmax. Diese geben das ‘Sichtbarkeitsfenster’ an, in welchen Transaktionen diese sichtbar sind. Irgendwann kommt aber das böse VACUUM vorbei und markiert alle Records, die von keiner laufenden TX mehr gesehen werden, dann endgültig als gelöscht. Und irgendwann später wird der Platz wieder für neue oder geänderte records verwendet. That’s life.

Was ich an Deiner Darstellung nicht ganz verstehe: in deiner GUI (welche?) siehst nix mehr, in PGAdmin aber doch? Das ist so nicht nachvollziehbar.

:slight_smile: Danke für deine schnelle Rückantwort.

Ich bin echt Leihe in dieser Geschichte und arbeite mich soeben erst dort ein.

Könntest du mir vielleicht noch einemal in bezug auf xmin und xmax helfen? Wo kann ich diese abändern? Damit ich meine Werte wieder sehe.

In PGAdmin sehe ich per Select alle Datensätze. Habe mir eine kleine Java GUI geschrieben die bekommt nichts mehr zusehen : )

Danke Kretschmer

xmin/xmax kannst Du nicht ändern. Du kannst nach “postgresql restore deleted rows” googeln. Bei allem, was Du dann machst, riskierst Du eher größeren Schaden als Nutzen, das als Warnung.

Geht es nur um eine Tabelle? Dann versuch in PGAdmin mit copy diese zu sichern. Oder selecte die Tabelle in eine neue. “create table my_copy as select * from orig;” - so als Fahrplan. Wobei ich noch immer nicht glauben kann, was Du sagst.

Wenn ein select die Datensätze anzeigt, dann sind sie auch noch in der Datenbank - kein Grund diese wieder herzustellen.

Ich weiß nicht was Deine GUI macht, aber vermutlich macht sie was falsch. Du solltest den Code in einem passenden Java Forum posten. Behandelst Du in Deinem Java Program Fehler korrekt? Also Exception fangen und ausgeben? Vielleicht hast Du einen Syntax-Fehler im SQL des Java Programs, oder die Verbindung scheitert.

@castorp: ack.

Wie schon gesagt, dann sind sie auch noch da.

Wo hast du das gelesen? Damit wir davor warnen können :wink:

Ich würde mir an deiner Stelle Gedanken über eine Backupstrategie machen, die nicht nur (seltenes) Hardwareversagen sondern auch (häufigere) Benutzerfehler einbezieht. Hat hier schon die eine oder andere Katastrophe verhindert…

Gruß Uwe