PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment remplacer une table dans Postgres ?

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 :