Зверніть увагу, що в Postgres за замовчуванням поведінка тимчасових таблиць полягає в тому, що вони не скидаються автоматично, а дані зберігаються при фіксації. Див ON COMMIT
.
Однак тимчасова таблиця випадає в кінці сеансу бази даних :
Тимчасові таблиці автоматично скидаються в кінці сеансу або, за бажанням, в кінці поточної транзакції.
Є декілька міркувань, які ви повинні взяти до уваги:
- Якщо ви хочете явно
DROP
вказати тимчасову таблицю в кінці транзакції, створіть її із CREATE TEMPORARY TABLE ... ON COMMIT DROP
синтаксисом.
- За наявності пулу з'єднань сеанс бази даних може охоплювати кілька сесій клієнта; щоб уникнути зіткнень
CREATE
, вам слід скинути тимчасові таблиці - або до повернення підключення до пулу (наприклад, виконуючи все всередині транзакції та використовуючи ON COMMIT DROP
синтаксис створення), або за необхідності (попередньо будь-якому CREATE TEMPORARY TABLE
оператору з відповідний DROP TABLE IF EXISTS
, який має перевагу також працювати поза транзакціями, наприклад, якщо з'єднання використовується в режимі автоматичної фіксації.)
- Поки тимчасова таблиця використовується, скільки вона поміститься в пам’яті перед переповненням на диск? Див.
temp_buffers
Опцію вpostgresql.conf
- Щось ще, про що мені слід турбуватися, часто працюючи з тимчасовими таблицями? Рекомендується пилосос після того, як ви викинули тимчасові столи, щоб очистити всі мертві кортежі з каталогу. Postgres автоматично буде пилососити кожні 3 хвилини для вас, використовуючи налаштування за замовчуванням (
auto_vacuum
).
Крім того , не пов'язані з вашим питанням (але , можливо , пов'язані з вашим проектом): Майте на увазі , що, якщо у вас є для виконання запитів тимчасову таблицю , після того, як ви заселили її, то це хороша ідея , щоб створити відповідні показники і випустити ANALYZE
на тимчасова таблиця, про яку йде мова після того, як ви закінчите вставляти в неї. За замовчуванням оптимізатор, що базується на витратах, вважатиме, що новостворена тимчасова таблиця має ~ 1000 рядків, і це може призвести до поганої продуктивності, якщо тимчасова таблиця насправді містить мільйони рядків.