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). В QHB применение SELECT INTO для создания таблиц имеет исторические причины. В новом коде для этой цели лучше всего использовать CREATE TABLE AS.

См. также

CREATE TABLE AS