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