On this page
SELECT INTO
SELECT INTO —从查询结果定义新表
Synopsis
[ WITH [ RECURSIVE ] with_query [, ...] ]
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
* | expression [ [ AS ] output_name ] [, ...]
INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ] new_table
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY expression [, ...] ]
[ HAVING condition [, ...] ]
[ WINDOW window_name AS ( window_definition ) [, ...] ]
[ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
[ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ]
[ LIMIT { count | ALL } ]
[ OFFSET start [ ROW | ROWS ] ]
[ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]
[ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ] [...] ]
Description
SELECT INTO
创建一个新表,并用查询计算的数据填充该表。数据不会像常规SELECT
一样返回给 Client 端。新表的列具有与SELECT
的输出列关联的名称和数据类型。
Parameters
TEMPORARY
或TEMP
- 如果指定,该表将被创建为临时表。有关详情,请参阅CREATE TABLE。
UNLOGGED
- 如果指定,该表将创建为未记录表。有关详情,请参阅CREATE TABLE。
new_table
- 要创建的表的名称(可选的模式限定)。
所有其他参数在SELECT下进行了详细说明。
Notes
创建表为在功能上类似于SELECT INTO
。 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
子句一起使用。
Examples
创建一个仅由表films
的最新条目组成的新表films_recent
:
SELECT * INTO films_recent FROM films WHERE date_prod >= '2002-01-01';
Compatibility
SQL 标准使用SELECT INTO
表示将值选择到宿主程序的标量变量中,而不是创建新表。这确实是 ECPG(请参阅Chapter 35)和 PL/pgSQL(请参阅Chapter 42)中的用法。 PostgreSQL 使用SELECT INTO
表示表创建是历史性的。为此,最好在新代码中使用CREATE TABLE AS
。