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.


См. также

CREATE TABLE AS