PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como faço para substituir uma tabela no Postgres?


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: