sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL temporära tabeller

Observera att, i Postgres, är standardbeteendet för temporära tabeller att de inte automatiskt tas bort och data kvarstår vid commit. Se ON COMMIT .

Temporära tabeller tas dock bort i slutet av en databassession:

Tillfälliga tabeller tas bort automatiskt i slutet av en session, eller valfritt i slutet av den aktuella transaktionen.

Det finns flera överväganden du måste ta hänsyn till:

  • Om du uttryckligen vill DROP en temporär tabell i slutet av en transaktion, skapa den med CREATE TEMPORARY TABLE ... ON COMMIT DROP syntax.
  • I närvaro av anslutningspoolning , kan en databassession sträcka sig över flera klientsessioner; för att undvika sammandrabbningar i CREATE , bör du släppa dina tillfälliga tabeller -- antingen innan du returnerar en anslutning till poolen (t.ex. genom att göra allt i en transaktion och använda ON COMMIT DROP skapande syntax), eller vid behov (genom att föregå valfri CREATE TEMPORARY TABLE sats med en motsvarande DROP TABLE IF EXISTS , vilket har fördelen att även arbeta utanför transaktioner t.ex. om anslutningen används i auto-commit-läge.)
  • Medan den temporära tabellen används, hur mycket av den får plats i minnet innan den flödar över till disken? Se temp_buffers alternativet i postgresql.conf
  • Något mer jag bör oroa mig för när jag ofta arbetar med tillfälliga tabeller? En dammsugare rekommenderas efter att du har släppt tillfälliga bord, för att rensa upp eventuella döda tuplar från katalogen. Postgres kommer automatiskt att dammsuga var tredje minut eller så för dig när du använder standardinställningarna (auto_vacuum ).

Inte heller relaterat till din fråga (men möjligen relaterat till ditt projekt):kom ihåg att om du måste köra frågor mot en tillfällig tabell efter du har fyllt i det, då är det en bra idé att skapa lämpliga index och utfärda en ANALYZE på temptabellen i fråga efter du är klar med att infoga den. Som standard kommer den kostnadsbaserade optimeraren att anta att en nyskapad temptabell har ~1000 rader och detta kan resultera i dålig prestanda om temptabellen faktiskt innehåller miljontals rader.



  1. bestämma teckenuppsättningen för en tabell/databas?

  2. Hitta nodordning i XML-dokument i SQL Server

  3. 4 sätt att lista vyerna i en SQLite-databas

  4. Kontrollera om MySQL-tabellen finns utan att använda välj från syntax?