Plus simple :
BEGIN;
DROP TABLE a;
ALTER TABLE a1 RENAME TO a;
COMMIT;
DROP TABLE
acquiert un ACCESS EXCLUSIVE
verrouiller sur la table de toute façon. Un LOCK
explicite la commande n'est pas meilleure. Et renommer un mort n'est qu'une perte de temps.
Vous voudrez peut-être verrouiller en écriture l'ancienne table pendant la préparation le nouveau, pour empêcher les écritures entre les deux. Ensuite, vous émettriez un verrou comme celui-ci plus tôt dans le processus :
LOCK TABLE a IN SHARE MODE;
Qu'advient-il des transactions simultanées essayant d'accéder à la table ? Ce n'est pas si simple, lisez ceci :
Explique pourquoi vous avez pu voir des messages d'erreur comme celui-ci :