sql >> Database >  >> RDS >> PostgreSQL

Tijdelijke PostgreSQL-tabellen

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 de CREATE 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 de ON COMMIT DROP te gebruiken aanmaaksyntaxis), of indien nodig (door voorafgaand aan een CREATE TEMPORARY TABLE statement met een bijbehorende DROP 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 in postgresql.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.



  1. Hoe krijg ik ForeignCollection Field in Cursor in Ormlite

  2. Recursieve zoekopdracht in Oracle

  3. MySQL UPDATE:Top 5 tips voor T-SQL-ontwikkelaars

  4. Hoe automatisch migraties genereren met Sequelize CLI vanuit Sequelize-modellen?