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 ] выборка ]
[ 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.