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.
Чтобы добавить столбец 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.