Seite 1 von 1

SEQUENCE-Werte für ISAM-Tabellen wiederherstellen

Verfasst: Do, 18. Nov 2021 8:34
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

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

Verfasst: Do, 18. Nov 2021 8:46
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!