SELECT INTO
SELECT INTO — определить новую таблицу из результатов запроса
Синтаксис
[ WITH [ RECURSIVE ] запрос_WITH [, ...] ]
SELECT [ ALL | DISTINCT [ ON ( выражение [, ...] ) ] ]
* | выражение [ [ AS ] имя_результата ] [, ...]
INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ] новая_таблица
[ FROM элемент_FROM [, ...] ]
[ WHERE условие ]
[ GROUP BY выражение [, ...] ]
[ HAVING условие [, ...] ]
[ WINDOW имя_окна AS ( определение_окна ) [, ...] ]
[ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
[ ORDER BY выражение [ ASC | DESC | USING оператор ] [ NULLS { FIRST | LAST } ] [, ...] ]
[ LIMIT { число | ALL } ]
[ OFFSET начало [ ROW | ROWS ] ]
[ FETCH { FIRST | NEXT } [ число ] { ROW | ROWS } ONLY ]
[ FOR { UPDATE | SHARE } [ OF имя_таблицы [, ...] ] [ NOWAIT ] [...] ]
Описание
Команда SELECT INTO
создает новую таблицу и заполняет ее данными, вычисленными
из запроса. Данные не возвращаются клиенту, как это происходит с обычной командой
SELECT
. Столбцы новой таблицы имеют имена и типы данных, связанные с выходными
столбцами SELECT
.
Параметры
TEMPORARY или TEMP
Если этот параметр указывается, таблица создается как временная.
Дополнительную информацию см. на справочной странице команды CREATE TABLE
.
UNLOGGED
Если этот параметр указывается, таблица создается как нежурналируемая.
Дополнительную информацию см. на справочной странице команды CREATE TABLE
.
новая_таблица
Имя создаваемой таблицы (может быть дополнено схемой).
Все остальные параметры подробно описаны на справочной странице команды SELECT
.
Примечания
Команда SELECT INTO
функционально схожа с командой CREATE TABLE AS
. Однако
рекомендуется использовать синтаксис CREATE TABLE AS
, так как форма SELECT INTO
недоступна в ECPG или PL/pgSQL, поскольку они по-другому интерпретируют предложение
INTO. Кроме того, CREATE TABLE AS
, предлагает больший набор функций, нежели
SELECT INTO
.
В отличие от CREATE TABLE AS
, команда SELECT INTO
не позволяет указывать
некоторые свойства, например, табличный метод доступа с помощью USING метод
или табличное пространство таблицы с помощью TABLESPACE имя_табличного_пространства.
Поэтому при возникновении такой необходимости лучше использовать команду
CREATE TABLE AS
. Таким образом, для новой таблицы выбирается метод доступа к
таблице по умолчанию. Дополнительную информацию см. в описании параметра
default_table_access_method.
Примеры
Создание новой таблицы films_recent, содержащей только последние записи из таблицы films:
SELECT * INTO films_recent FROM films WHERE date_prod >= '2002-01-01';
Совместимость
Стандарт SQL применяет команду SELECT INTO
для передачи выбранных значений
в скалярные переменные клиентской программы, а не для создания новой таблицы.
Именно это применение описано в ECPG и PL/pgSQL (см. главу PL/pgSQL — процедурный язык SQL).
В QHB применение SELECT INTO
для создания таблиц имеет
исторические причины. Некоторые другие реализации SQL тоже используют SELECT INTO
таким образом (но большинство реализаций SQL поддерживают и CREATE TABLE AS
).
Если не учитывать эти соображения совместимости, в новом коде для этой цели лучше
всего использовать CREATE TABLE AS
.