Manchmal dauert es ein wenig, bis man auf das Offensichtliche kommt. Ich habe hin und her überlegt, wie ich ein Update und Alter Table testen kann, ohne die Daten zu gefährden. Die Lösung ist elementarer Bestandteil einer jeden SQL-Datenbank: Eine Transaktion.
Transaktionen in PostgreSQL
begin; alter table mytable rename column id to name; \d mytable
Table "public.mytable" Column | Type | Modifiers ------------+------------+-------------- name | bigint | not null
rollback; \d
Table "public.mytable" Column | Type | Modifiers ------------+------------+-------------- id | bigint | not null
Sind die vorgenommenen Änderungen korrekt, können sie mit commit;
übernommen werden. Der offizielle SQL-Befehl zum Starten einer Transaktion ist start transaction;
. Allerdings unterstützen alle mir bekannten Datenbanken die etwas handlichere Form begin;
.
Verschachtelte Transaktionen: Savepoints
Ist der Test komplexer, so dass man Transaktionen schachteln möchte, kann man sogenannte Savepoints verwenden.
begin; -- Änderung 1 savepoint sp1; -- Änderung 2a rollback to savepoint sp1; -- 2a zurücknehmen -- Änderung 2b rollback; -- 2b und 1 zurücknehmen
Transaktionen in MySQL
Die PostgreSQL-Beispiele werden auch von MySQL unterstützt.