Tieni presente che, in Postgres, il comportamento predefinito per le tabelle temporanee è che non vengono eliminate automaticamente e che i dati vengono mantenuti durante il commit. Vedi ON COMMIT
.
Tuttavia, le tabelle temporanee vengono eliminate alla fine di una sessione del database:
Le tabelle temporanee vengono automaticamente eliminate al termine di una sessione o, facoltativamente, al termine della transazione corrente.
Ci sono diverse considerazioni da tenere in considerazione:
- Se vuoi esplicitamente
DROP
una tabella temporanea al termine di una transazione, crearla con ilCREATE TEMPORARY TABLE ... ON COMMIT DROP
sintassi. - In presenza di pool di connessioni , una sessione di database può estendersi su più sessioni client; per evitare scontri in
CREATE
, dovresti eliminare le tue tabelle temporanee, prima di restituire una connessione al pool (ad esempio facendo tutto all'interno di una transazione e usando ilON COMMIT DROP
sintassi di creazione), o in base alle necessità (precedendo qualsiasiCREATE TEMPORARY TABLE
istruzione con un corrispondenteDROP TABLE IF EXISTS
, che ha il vantaggio di lavorare anche al di fuori delle transazioni es. se la connessione viene utilizzata in modalità di commit automatico.) - Mentre la tabella temporanea è in uso, quanta parte entrerà in memoria prima di traboccare su disco? Vedi i
temp_buffers
opzione inpostgresql.conf
- Qualcos'altro di cui dovrei preoccuparmi quando lavoro spesso con le tabelle temporanee? Si consiglia un vuoto dopo aver eliminato le tabelle temporanee, per ripulire eventuali tuple morte dal catalogo. Postgres aspirerà automaticamente ogni 3 minuti circa quando utilizzi le impostazioni predefinite (
auto_vacuum
).
Inoltre, non correlato alla tua domanda (ma possibilmente correlato al tuo progetto):tieni presente che, se devi eseguire query su una tabella temporanea dopo lo hai popolato, quindi è una buona idea creare indici appropriati ed emettere un ANALYZE
sulla tabella temporanea in questione dopo hai finito di inserirlo. Per impostazione predefinita, l'ottimizzatore basato sui costi presuppone che una tabella temporanea appena creata abbia circa 1000 righe e ciò potrebbe comportare prestazioni scadenti se la tabella temporanea contiene effettivamente milioni di righe.