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
.
См. также
CREATE TABLE ASALTER ROUTINE
ALTER ROUTINE — change the definition of a routine
Synopsis
ALTER ROUTINEname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ]action
[ ... ] [ RESTRICT ] ALTER ROUTINEname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] RENAME TOnew_name
ALTER ROUTINEname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] OWNER TO {new_owner
| CURRENT_USER | SESSION_USER } ALTER ROUTINEname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] SET SCHEMAnew_schema
ALTER ROUTINEname
[ ( [ [argmode
] [argname
]argtype
[, ...] ] ) ] [ NO ] DEPENDS ON EXTENSIONextension_name
whereaction
is one of: IMMUTABLE | STABLE | VOLATILE [ NOT ] LEAKPROOF [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER PARALLEL { UNSAFE | RESTRICTED | SAFE } COSTexecution_cost
ROWSresult_rows
SETconfiguration_parameter
{ TO | = } {value
| DEFAULT } SETconfiguration_parameter
FROM CURRENT RESETconfiguration_parameter
RESET ALL
Description
ALTER ROUTINE
changes the definition of a routine, which can be an aggregate function, a normal function, or a procedure. See under ALTER AGGREGATE, ALTER FUNCTION, and ALTER PROCEDURE for the description of the parameters, more examples, and further details.
Examples
To rename the routine foo
for type integer
to foobar
:
ALTER ROUTINE foo(integer) RENAME TO foobar;
This command will work independent of whether foo
is an aggregate, function, or procedure.
Compatibility
This statement is partially compatible with the ALTER ROUTINE
statement in the SQL standard. See under ALTER FUNCTION and ALTER PROCEDURE for more details. Allowing routine names to refer to aggregate functions is a PostgreSQL extension.
See Also
ALTER AGGREGATE, ALTER FUNCTION, ALTER PROCEDURE, DROP ROUTINE Note that there is no CREATE ROUTINE
command.