PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Temporäre PostgreSQL-Tabellen

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 dem CREATE 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 den ON COMMIT DROP Erstellungssyntax), oder auf Bedarfsbasis (durch Voranstellen einer CREATE TEMPORARY TABLE -Anweisung mit einem entsprechenden DROP 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 in postgresql.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.