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ącON COMMIT DROP
składnia tworzenia), lub w razie potrzeby (poprzedzając dowolnąCREATE TEMPORARY TABLE
oświadczenie z odpowiednimDROP 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 wpostgresql.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.