Houd er rekening mee dat, in Postgres, het standaardgedrag voor tijdelijke tabellen is dat ze niet automatisch worden verwijderd en dat gegevens behouden blijven bij het vastleggen. Zie ON COMMIT
.
Tijdelijke tabellen worden echter verwijderd aan het einde van een databasesessie:
Tijdelijke tafels worden automatisch verwijderd aan het einde van een sessie, of optioneel aan het einde van de huidige transactie.
Er zijn meerdere overwegingen waarmee u rekening moet houden:
- Als je expliciet
DROP
. wilt een tijdelijke tabel aan het einde van een transactie, maak deze aan met deCREATE TEMPORARY TABLE ... ON COMMIT DROP
syntaxis. - In aanwezigheid van pooling van verbindingen , een databasesessie kan meerdere clientsessies omvatten; om botsingen te voorkomen in
CREATE
, moet u uw tijdelijke tafels laten vallen -- ofwel voordat u weer verbinding maakt met de pool (bijv. door alles binnen een transactie te doen en deON COMMIT DROP
te gebruiken aanmaaksyntaxis), of indien nodig (door voorafgaand aan eenCREATE TEMPORARY TABLE
statement met een bijbehorendeDROP TABLE IF EXISTS
, wat het voordeel heeft dat het ook buiten transacties werkt, b.v. als de verbinding wordt gebruikt in de modus voor automatisch vastleggen.) - Terwijl de tijdelijke tabel in gebruik is, hoeveel past er in het geheugen voordat deze overloopt naar de schijf? Zie de
temp_buffers
optie inpostgresql.conf
- Iets anders waar ik me zorgen over moet maken als ik vaak met tijdelijke tabellen werk? Een vacuüm wordt aanbevolen nadat je tijdelijke tabellen hebt DROPped, om eventuele dode tuples uit de catalogus op te ruimen. Postgres zal automatisch om de 3 minuten voor u stofzuigen wanneer u de standaardinstellingen gebruikt (
auto_vacuum
).
Ook niet gerelateerd aan uw vraag (maar mogelijk gerelateerd aan uw project):houd er rekening mee dat, als u query's moet uitvoeren op een tijdelijke tabel na u het hebt ingevuld, is het een goed idee om geschikte indices te maken en een ANALYZE
uit te geven op de betreffende tijdelijke tafel na je bent klaar met invoegen. Standaard gaat de op kosten gebaseerde optimalisatie ervan uit dat een nieuw gemaakte tijdelijke tabel ~1000 rijen heeft en dit kan resulteren in slechte prestaties als de tijdelijke tabel daadwerkelijk miljoenen rijen bevat.