Más simple:
BEGIN;
DROP TABLE a;
ALTER TABLE a1 RENAME TO a;
COMMIT;
DROP TABLE
adquiere un ACCESS EXCLUSIVE
bloqueo en la mesa de todos modos. Un LOCK
explícito el comando no es mejor. Y renombrar a un tipo muerto es solo una pérdida de tiempo.
Es posible que desee bloquear la escritura de la tabla anterior mientras prepara el nuevo, para evitar escrituras en el medio. Entonces emitiría un candado como este antes en el proceso:
LOCK TABLE a IN SHARE MODE;
¿Qué sucede con las transacciones simultáneas que intentan acceder a la tabla? No es tan simple, lee esto:
Explica por qué puede haber visto mensajes de error como este: