Einfacher:
BEGIN;
DROP TABLE a;
ALTER TABLE a1 RENAME TO a;
COMMIT;
DROP TABLE
erwirbt einen ACCESS EXCLUSIVE
verriegeln Sie trotzdem den Tisch. Ein explizites LOCK
Befehl ist nicht besser. Und einen Toten umzubenennen ist nur Zeitverschwendung.
Vielleicht möchten Sie die alte Tabelle während der Vorbereitung mit einer Schreibsperre versehen das neue, um Schreibvorgänge zwischendurch zu verhindern. Dann würden Sie früher im Prozess eine Sperre wie diese ausgeben:
LOCK TABLE a IN SHARE MODE;
Was passiert mit gleichzeitigen Transaktionen, die versuchen, auf die Tabelle zuzugreifen? Es ist nicht so einfach, lesen Sie dies:
Erklärt, warum Sie möglicherweise Fehlermeldungen wie diese gesehen haben: