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
.