SELECT INTO
SELECT INTO — создать таблицу из результатов запроса
Синтаксис
[ WITH [ RECURSIVE ]запрос_WITH
[, ...] ] SELECT [ ALL | DISTINCT [ ON (выражение
[, ...] ) ] ] * |выражение
[ [ AS ]имя_результата
] [, ...] INTO [ TEMPORARY | TEMP | UNLOGGED | CONSTANT ] [ 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.
CONSTANT
Если указано, таблица будет создана в режиме «только чтение». За подробностями обратитесь к CREATE TABLE.
новая_таблица
Имя создаваемой таблицы (возможно, дополненное схемой).
Все другие параметры подробно описываются в SELECT.
Замечания
Команда SELECT INTO
действует подобно CREATE TABLE AS, но рекомендуется использовать CREATE TABLE AS
, так как SELECT INTO
не поддерживается в ECPG и PL/pgSQL, вследствие того, что они воспринимают предложение INTO
по-своему. К тому же, CREATE TABLE AS
предоставляет больший набор возможностей, чем SELECT INTO
.
Чтобы добавить столбец OID в таблицу, создаваемую командой SELECT INTO
, необходимо установить конфигурационную переменную default_with_oids. С другой стороны, можно использовать CREATE TABLE AS
с предложением WITH OIDS
.
Примеры
Создание таблицы films_recent
, содержащей только последние записи из таблицы films
:
SELECT * INTO films_recent FROM films WHERE date_prod >= '2002-01-01';
Совместимость
В стандарте SQL команда SELECT INTO
применяется для передачи скалярных значений клиентской программе, но не для создания новой таблицы. Именно это применение имеет место в ECPG (см. Главу 34) и в PL/pgSQL (см. Главу 41). В Postgres Pro команда SELECT INTO
связана с созданием таблицы по историческим причинам. В новом коде для этих целей лучше использовать CREATE TABLE AS
.