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

Tabelle temporanee PostgreSQL

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 il CREATE 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 il ON COMMIT DROP sintassi di creazione), o in base alle necessità (precedendo qualsiasi CREATE TEMPORARY TABLE istruzione con un corrispondente DROP 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 in postgresql.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.