Bemærk venligst, at i Postgres er standardadfærden for midlertidige tabeller, at de ikke automatisk slettes, og data bevares ved commit. Se ON COMMIT
.
Midlertidige tabeller slettes dog i slutningen af en databasesession:
Midlertidige tabeller slettes automatisk i slutningen af en session, eller valgfrit i slutningen af den aktuelle transaktion.
Der er flere overvejelser, du skal tage i betragtning:
- Hvis du eksplicit ønsker at
DROP
en midlertidig tabel i slutningen af en transaktion, opret den medCREATE TEMPORARY TABLE ... ON COMMIT DROP
syntaks. - I nærvær af forbindelsespooling , kan en databasesession strække sig over flere klientsessioner; for at undgå sammenstød i
CREATE
, bør du droppe dine midlertidige tabeller -- enten før du returnerer en forbindelse til puljen (f.eks. ved at gøre alt i en transaktion og brugeON COMMIT DROP
oprettelsessyntaks), eller efter behov (ved at gå foran enhverCREATE TEMPORARY TABLE
sætning med en tilsvarendeDROP TABLE IF EXISTS
, som har fordelen af også at arbejde udenfor transaktioner f.eks. hvis forbindelsen bruges i auto-commit-tilstand.) - Mens den midlertidige tabel er i brug, hvor meget af den vil passe i hukommelsen, før den flyder over på disken? Se
temp_buffers
mulighed ipostgresql.conf
- Er der andet, jeg bør bekymre mig om, når jeg ofte arbejder med midlertidige tabeller? En støvsuger anbefales, efter at du har DROPPT midlertidige borde, for at rydde op i eventuelle døde tupler fra kataloget. Postgres vil automatisk støvsuge hvert 3. minut eller deromkring for dig, når du bruger standardindstillingerne (
auto_vacuum
).
Også uden relation til dit spørgsmål (men muligvis relateret til dit projekt):husk, at hvis du skal køre forespørgsler mod en midlertidig tabel efter du har udfyldt det, så er det en god idé at oprette passende indekser og udstede en ANALYZE
på det pågældende vikarbord efter du er færdig med at indsætte i den. Som standard vil den omkostningsbaserede optimering antage, at en nyoprettet temp-tabellen har ~1000 rækker, og dette kan resultere i dårlig ydeevne, hvis temp-tabellen faktisk indeholder millioner af rækker.