Vezměte prosím na vědomí, že v Postgresu je výchozí chování pro dočasné tabulky takové, že nejsou automaticky zrušeny a data jsou zachována při odevzdání. Viz ON COMMIT .
Dočasné tabulky jsou však na konci relace databáze zrušeny:
Dočasné tabulky jsou automaticky zrušeny na konci relace nebo volitelně na konci aktuální transakce.
Existuje několik aspektů, které musíte vzít v úvahu:
- Pokud chcete explicitně
DROPdočasnou tabulku na konci transakce, vytvořte ji pomocíCREATE TEMPORARY TABLE ... ON COMMIT DROPsyntaxe. - V případě sdružování připojení , relace databáze může zahrnovat více relací klienta; abyste se vyhnuli kolizím v
CREATE, měli byste zrušit své dočasné tabulky – buď před vrácením připojení k fondu (např. provedením všeho v rámci transakce a použitímON COMMIT DROPsyntaxe vytvoření), nebo podle potřeby (před každýmCREATE TEMPORARY TABLEpříkaz s odpovídajícímDROP TABLE IF EXISTS, což má tu výhodu, že funguje i mimo transakce, např. pokud je připojení použito v režimu automatického potvrzení.) - Jaká část se vejde do paměti, dokud se dočasná tabulka používá, než přeteče na disk? Viz
temp_buffersmožnost vpostgresql.conf - Ještě něco, čeho bych se měl obávat, když často pracuji s dočasnými tabulkami? Po odstranění dočasných tabulek se doporučuje vysát, aby se odstranily všechny mrtvé n-tice z katalogu. Postgres bude automaticky vysávat každé 3 minuty při použití výchozího nastavení (
auto_vacuum).
Také nesouvisející s vaší otázkou (ale možná související s vaším projektem):mějte na paměti, že pokud musíte spouštět dotazy na dočasnou tabulku po pokud jste jej zaplnili, je dobré vytvořit vhodné indexy a vydat ANALYZE v příslušné dočasné tabulce po jste do něj vložili. Ve výchozím nastavení bude optimalizátor na základě nákladů předpokládat, že nově vytvořená dočasná tabulka má ~1000 řádků, což může mít za následek špatný výkon, pokud dočasná tabulka ve skutečnosti obsahuje miliony řádků.