PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Tabele tymczasowe PostgreSQL

Należy pamiętać, że w Postgresie domyślnym zachowaniem tabel tymczasowych jest to, że nie są one automatycznie usuwane, a dane są utrwalane podczas zatwierdzania. Zobacz ON COMMIT .

Tabele tymczasowe są jednak usuwane pod koniec sesji bazy danych:

Tabele tymczasowe są automatycznie usuwane na koniec sesji lub opcjonalnie na koniec bieżącej transakcji.

Należy wziąć pod uwagę wiele kwestii:

  • Jeśli chcesz jawnie DROP tabelę tymczasową na końcu transakcji, utwórz ją za pomocą CREATE TEMPORARY TABLE ... ON COMMIT DROP składnia.
  • W przypadku puli połączeń , sesja bazy danych może obejmować wiele sesji klienta; aby uniknąć starć w CREATE , powinieneś usunąć swoje tymczasowe tabele - albo przed zwróceniem połączenia do puli (np. wykonując wszystko w ramach transakcji i używając ON COMMIT DROP składnia tworzenia), lub w razie potrzeby (poprzedzając dowolną CREATE TEMPORARY TABLE oświadczenie z odpowiednim DROP TABLE IF EXISTS , co ma tę zaletę, że działa również poza transakcjami m.in. jeśli połączenie jest używane w trybie automatycznego zatwierdzania).
  • Gdy tabela tymczasowa jest w użyciu, jaka jej część zmieści się w pamięci przed przepełnieniem na dysk? Zobacz temp_buffers opcja w postgresql.conf
  • Czy jest coś jeszcze, o co powinienem się martwić podczas częstej pracy z tabelami tymczasowymi? Odkurzanie jest zalecane po usunięciu tymczasowych tabel, aby wyczyścić wszystkie martwe krotki z katalogu. Postgres będzie automatycznie odkurzał co około 3 minuty, jeśli używasz ustawień domyślnych (auto_vacuum ).

Również niezwiązane z Twoim pytaniem (ale prawdopodobnie związane z Twoim projektem):pamiętaj, że jeśli musisz uruchamiać zapytania względem tabeli tymczasowej po wypełniłeś go, to dobrym pomysłem jest stworzenie odpowiednich indeksów i wydanie ANALYZE w tabeli tymczasowej, o której mowa po skończyłeś wstawiać do niego. Domyślnie optymalizator oparty na kosztach zakłada, że ​​nowo utworzona tabela tymczasowa ma ~1000 wierszy, co może skutkować niską wydajnością, jeśli tabela tymczasowa faktycznie zawiera miliony wierszy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Datagrip Nie można zastosować zmian Ta tabela jest tylko do odczytu. Nie można zastosować zmian w edytorze komórek

  2. Jak wyeksportować tabelę jako CSV z nagłówkami na Postgresql?

  3. Jak połączyć aktywnych użytkowników z bazą danych postgreSQL przez SQL?

  4. Czy funkcje PostgreSQL są transakcyjne?

  5. Dodanie „serial” do istniejącej kolumny w Postgres