Временные таблицы в PostgreSQL
Пересказ статьи Shivayan Mukherjee. PostgreSQL Temporary Table
В этом руководстве изучаются временные таблицы PostgreSQL и их использование. Рассматривается базовый синтаксис и приводится несколько примеров, поясняющих их функциональность.
Определение
Временная таблица PostgreSQL, как подразумевает ее название, является таблицей, которая существует для данной сессии и автоматически удаляется, когда эта сессия закрывается. Временная таблица связана с данной сессией, и к ней нет доступа из другой сессии. Запрос из другой сессии вернет ошибку, если она попытается получить доступ к временной таблице, созданной не в этой сессии.
Ключевые особенности временных таблиц:
ИЛИ
PostgreSQL поддерживает оба ключевых слова Temporary и Temp, которые являются взаимозаменяемыми при создании временной таблицы.
В синтаксисе:
Теперь давайте рассмотрим поясняющие примеры.
Пример 1 - Открываем сессию, создаем новую временную таблицу в базе данных по умолчанию "postgres". Параллельно открываем другую сессию и пытаемся получить доступ к временной таблице, созданной в предыдущей сессии. Выясним, что доступа к таблице нет.
Новая сессия:
Пример 2 - Временная таблица автоматически удаляется при закрытии сессии.
Сначала мы создадим новую таблицу в базе данных по умолчанию "postgres", затем закроем сессию и, наконец, попытаемся снова получить к ней доступ после повторного открытия новой сессии.
Открывает новую сессию и обнаруживает, что таблица не существует. Это доказывает тот факт, что таблица не существует вне сессии, в которой была создана.
Пример 3 - Создаем две таблицы, одну временную и одну постоянную с тем же именем. После создания мы пытаемся получить доступ к таблицам, но доступной является только временная таблица.
Создаем таблицу с именем "students" и выполняем к ней запрос. Пока поведение ожидаемое.
Затем создаем временную таблицу с тем же именем "students" и снова пытаемся выполнить к ней запрос. В этом сочетании видно, что временная таблица имеет приоритет, и возвращается она, а не постоянная таблица. Тут еще раз важно подчеркнуть, что временная таблица привязана к сессии и теряется при закрытии сессии, в отличие от постоянных таблиц.
Пример 4 - Временная не принадлежит какой-либо схеме, даже схеме "public". Временная таблица "students" принадлежит схеме с именем 'pg_temp_4', которое является алиасом временной схемы текущей сессии в отличие от постоянной таблицы, которая принадлежит схеме по умолчанию "public", что показано в предыдущем примере.
Для удаления временной таблицы используется та же самая команда, что и для постоянной таблицы, в неизменном синтаксисе. Давайте удалим таблицу, созданную в предыдущем примере. Мы сначала выполним команду DROP TABLE с последующим выводом списка всех таблиц при помощи команды "\dt", чтобы убедиться в том, что временная таблица пропала, а постоянная по-прежнему возвращается.
В этой статье рассматривалось понятие временной таблицы в PostgreSQL и ее использование. Так как временные таблицы могут бы очень полезны в ряде случаев для хранения временных данных, они часто используются в исследовательских и аналитических проектах.
Ссылки по теме
1. Создание базы данных и таблиц в PostgreSQL: Изучение PostgreSQL с Grant Fritchey
2. CTE или временные таблицы, что лучше?
3. Временные таблицы в MySQL: высокоуровневый обзор
4. Есть ли польза от удаления временной таблицы в хранимой процедуре?
- Временная таблица относится к данной сессии, и она недоступна для других сессий.
- Временная таблица автоматически удаляется при закрытии сессии.
- Временная таблица не принадлежит ни к какой схеме.
- 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. Есть ли польза от удаления временной таблицы в хранимой процедуре?
Обратные ссылки
Автор не разрешил комментировать эту запись
Комментарии
Показывать комментарии Как список | Древовидной структурой