Più semplice:
BEGIN;
DROP TABLE a;
ALTER TABLE a1 RENAME TO a;
COMMIT;
DROP TABLE
acquisisce un ACCESS EXCLUSIVE
blocca comunque il tavolo. Un esplicito LOCK
il comando non è migliore. E rinominare un morto è solo una perdita di tempo.
Potresti voler bloccare in scrittura la vecchia tabella durante la preparazione il nuovo, per evitare scritture intermedie. Quindi emetteresti un blocco come questo all'inizio del processo:
LOCK TABLE a IN SHARE MODE;
Cosa succede alle transazioni simultanee che tentano di accedere alla tabella? Non è così semplice, leggi questo:
Spiega perché potresti aver visto messaggi di errore come questo: