Bitte beachten Sie, dass in Postgres das Standardverhalten für temporäre Tabellen darin besteht, dass sie nicht automatisch gelöscht werden und Daten beim Commit beibehalten werden. Siehe ON COMMIT
.
Temporäre Tabellen werden jedoch am Ende einer Datenbanksitzung gelöscht:
Temporäre Tabellen werden am Ende einer Sitzung oder optional am Ende der aktuellen Transaktion automatisch gelöscht.
Es gibt mehrere Überlegungen, die Sie berücksichtigen müssen:
- Wenn Sie explizit
DROP
wollen B. eine temporäre Tabelle am Ende einer Transaktion, erstellen Sie sie mit demCREATE TEMPORARY TABLE ... ON COMMIT DROP
Syntax. - Bei Vorhandensein von Verbindungspooling , kann sich eine Datenbanksitzung über mehrere Clientsitzungen erstrecken; um Konflikte in
CREATE
zu vermeiden , sollten Sie Ihre temporären Tabellen löschen – entweder bevor Sie eine Verbindung zum Pool zurückgeben (z. B. indem Sie alles innerhalb einer Transaktion tun und denON COMMIT DROP
Erstellungssyntax), oder auf Bedarfsbasis (durch Voranstellen einerCREATE TEMPORARY TABLE
-Anweisung mit einem entsprechendenDROP TABLE IF EXISTS
, was den Vorteil hat, auch außerhalb von Transaktionen zu arbeiten, z. wenn die Verbindung im Auto-Commit-Modus verwendet wird.) - Während die temporäre Tabelle verwendet wird, wie viel davon passt in den Arbeitsspeicher, bevor sie auf die Festplatte überläuft? Siehe
temp_buffers
Option inpostgresql.conf
- Sollte ich mir sonst noch Gedanken machen, wenn ich oft mit temporären Tabellen arbeite? Nachdem Sie temporäre Tabellen gelöscht haben, wird ein Vakuum empfohlen, um alle toten Tupel aus dem Katalog zu bereinigen. Postgres saugt automatisch etwa alle 3 Minuten für Sie, wenn Sie die Standardeinstellungen verwenden (
auto_vacuum
).
Auch unabhängig von Ihrer Frage (aber möglicherweise im Zusammenhang mit Ihrem Projekt):Denken Sie daran, dass Sie nach Abfragen für eine temporäre Tabelle ausführen müssen Sie haben es gefüllt, dann ist es eine gute Idee, entsprechende Indizes zu erstellen und eine ANALYZE
auszugeben auf der betreffenden temporären Tabelle nach Sie sind fertig mit dem Einfügen. Standardmäßig geht der kostenbasierte Optimierer davon aus, dass eine neu erstellte temporäre Tabelle ~1000 Zeilen hat, und dies kann zu einer schlechten Leistung führen, wenn die temporäre Tabelle tatsächlich Millionen von Zeilen enthält.