PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come faccio a sostituire una tabella in Postgres?

Più semplice:

BEGIN;
DROP TABLE a;
ALTER TABLE a1 RENAME TO a;
COMMIT;

DROP TABLE acquisisce un ACCESS EXCLUSIVE blocca comunque il tavolo. Un esplicito LOCK il comando non è migliore. E rinominare un morto è solo una perdita di tempo.

Potresti voler bloccare in scrittura la vecchia tabella durante la preparazione il nuovo, per evitare scritture intermedie. Quindi emetteresti un blocco come questo all'inizio del processo:

LOCK TABLE a IN SHARE MODE;

Cosa succede alle transazioni simultanee che tentano di accedere alla tabella? Non è così semplice, leggi questo:

Spiega perché potresti aver visto messaggi di errore come questo: