Skip to content

Временные таблицы в PostgreSQL

Пересказ статьи Shivayan Mukherjee. PostgreSQL Temporary Table


В этом руководстве изучаются временные таблицы PostgreSQL и их использование. Рассматривается базовый синтаксис и приводится несколько примеров, поясняющих их функциональность.

Определение


Временная таблица PostgreSQL, как подразумевает ее название, является таблицей, которая существует для данной сессии и автоматически удаляется, когда эта сессия закрывается. Временная таблица связана с данной сессией, и к ней нет доступа из другой сессии. Запрос из другой сессии вернет ошибку, если она попытается получить доступ к временной таблице, созданной не в этой сессии.
Ключевые особенности временных таблиц:

  • Временная таблица относится к данной сессии, и она недоступна для других сессий.

  • Временная таблица автоматически удаляется при закрытии сессии.

  • Временная таблица не принадлежит ни к какой схеме.

  • PostgreSQL допускает совпадение имени временной таблицы с именем постоянной таблицы в той же базе данных.

  • При совпадении имен временной и постоянной таблиц, доступа к постоянной таблице не будет, пока временная таблица не будет удалена из базы или сессии.

Базовый синтаксис


CREATE TEMPORARY TABLE имя_таблицы(
список_столбцов
);

ИЛИ
CREATE TEMP TABLE имя_таблицы(
список_столбцов
);

PostgreSQL поддерживает оба ключевых слова Temporary и Temp, которые являются взаимозаменяемыми при создании временной таблицы.

В синтаксисе:

  • После ключевых слов CREATE TEMPORARY TABLE сначала указывается имя таблицы.

  • Затем следует список столбцов таблицы.

Теперь давайте рассмотрим поясняющие примеры.

Пример 1 - Открываем сессию, создаем новую временную таблицу в базе данных по умолчанию "postgres". Параллельно открываем другую сессию и пытаемся получить доступ к временной таблице, созданной в предыдущей сессии. Выясним, что доступа к таблице нет.

CREATE TEMP TABLE mytable(
name varchar,
age integer
);



Новая сессия:



Пример 2 - Временная таблица автоматически удаляется при закрытии сессии.

Сначала мы создадим новую таблицу в базе данных по умолчанию "postgres", затем закроем сессию и, наконец, попытаемся снова получить к ней доступ после повторного открытия новой сессии.



Открывает новую сессию и обнаруживает, что таблица не существует. Это доказывает тот факт, что таблица не существует вне сессии, в которой была создана.



Пример 3 - Создаем две таблицы, одну временную и одну постоянную с тем же именем. После создания мы пытаемся получить доступ к таблицам, но доступной является только временная таблица.

Создаем таблицу с именем "students" и выполняем к ней запрос. Пока поведение ожидаемое.

CREATE TABLE students(
id SERIAL PRIMARY KEY,
name VARCHAR NOT NULL
);



Затем создаем временную таблицу с тем же именем "students" и снова пытаемся выполнить к ней запрос. В этом сочетании видно, что временная таблица имеет приоритет, и возвращается она, а не постоянная таблица. Тут еще раз важно подчеркнуть, что временная таблица привязана к сессии и теряется при закрытии сессии, в отличие от постоянных таблиц.

CREATE TEMP TABLE students(
student_id INT
);



Пример 4 - Временная не принадлежит какой-либо схеме, даже схеме "public". Временная таблица "students" принадлежит схеме с именем 'pg_temp_4', которое является алиасом временной схемы текущей сессии в отличие от постоянной таблицы, которая принадлежит схеме по умолчанию "public", что показано в предыдущем примере.



Удаление временной таблицы


Для удаления временной таблицы используется та же самая команда, что и для постоянной таблицы, в неизменном синтаксисе. Давайте удалим таблицу, созданную в предыдущем примере. Мы сначала выполним команду DROP TABLE с последующим выводом списка всех таблиц при помощи команды "\dt", чтобы убедиться в том, что временная таблица пропала, а постоянная по-прежнему возвращается.

Drop table students;



Заключение


В этой статье рассматривалось понятие временной таблицы в PostgreSQL и ее использование. Так как временные таблицы могут бы очень полезны в ряде случаев для хранения временных данных, они часто используются в исследовательских и аналитических проектах.

Ссылки по теме
1. Создание базы данных и таблиц в PostgreSQL: Изучение PostgreSQL с Grant Fritchey

2. CTE или временные таблицы, что лучше?

3. Временные таблицы в MySQL: высокоуровневый обзор

4. Есть ли польза от удаления временной таблицы в хранимой процедуре?

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Автор не разрешил комментировать эту запись

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.