Mais simples:
BEGIN;
DROP TABLE a;
ALTER TABLE a1 RENAME TO a;
COMMIT;
DROP TABLE
adquire um ACCESS EXCLUSIVE
trancar na mesa de qualquer maneira. Um LOCK
explícito comando não é melhor. E renomear um cara morto é apenas uma perda de tempo. Você pode querer bloquear a gravação da tabela antiga enquanto prepara o novo, para evitar gravações no meio. Então você emitiria um bloqueio como este no início do processo:
LOCK TABLE a IN SHARE MODE;
O que acontece com transações simultâneas tentando acessar a tabela? Não é tão simples, leia isto:
Explica por que você pode ter visto mensagens de erro como esta: