PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie ersetze ich eine Tabelle in Postgres?

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: