SEQUENCE-Werte für ISAM-Tabellen wiederherstellen

Hier dreht es sich um den PostGre Server

Moderator: Moderatoren

Antworten
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 265
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 66 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

SEQUENCE-Werte für ISAM-Tabellen wiederherstellen

Beitrag von dtmackenzie »

Folgender SQL-Befehl tut dies nicht direkt, sondern generiert SQL-Befehle, die es machen:

Code: Alles auswählen

SELECT
concat(
    'SELECT setval(',
    concat('''', table_name, '___record_seq'''),
    ', max(__record)) FROM ',
    table_name,
    ';'
)
FROM public."alaska-software.isam.tables"
ORDER BY table_name ASC
Daraus kommt eine Reihe von SELECTs wie:

Code: Alles auswählen

SELECT setval('xxx___record_seq', max(__record)) FROM xxx;
wo xxx der jeweilige Tabellenname ist.

Wozu ist das gut? Nun, ich habe einen gewaltigen Schreck bekommen als ich aus Versehen ein Backup anstatt in eine Test-Datenbank (was ich hunderte male gemacht habe) in die Live-Datenbank geladen habe. Zum Glück hat dies doch kaum Schaden angerichtet - sowohl die DDL-Befehle als auch die INSERTs waren unwirksam weil die Schema-Objekte bzw. Datensätze schon existierten. Die SEQUENCE-Werte wurden aber doch überschrieben, was zur Folge hatte, dass beim Append schon existierende Werte für __record benutzt wurden - also ging jeder Append natürlich schief. Nachdem ich die SEQUENCE-Werte so korrigiert habe, scheint aber alles wieder zu gehen, also bin ich mit einem blauen Auge davon gekommen.

Also, falls Euch sowas irgendwann passieren sollte - "Don't Panic"! :D
Viele Grüße,
David
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: SEQUENCE-Werte für ISAM-Tabellen wiederherstellen

Beitrag von Tom »

Sensationell! Ich bin gestern auf das gleiche Problem getreten. Es war zwar "nur" die Folge eines testweisen abermaligen Upsizings auf dieselbe, bereits gefüllte Datenbank, aber da wir das in einer Übergangsphase zulassen, müssen wir auch damit umgehen können. Ich probiere das nachher mal aus. Danke!
Herzlich,
Tom
Antworten