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 (см. Главу 36) и в PL/pgSQL (см. Главу 43). В PostgreSQL команда SELECT INTO связана с созданием таблицы по историческим причинам. Таким же образом работает SELECT INTO и в некоторых другие реализациях SQL (но в большинстве реализаций поддерживается конструкция CREATE TABLE AS). Если эти соображения совместимости не важны, в новом коде для этих целей лучше использовать CREATE TABLE AS.