SELECT INTO

SELECT INTO

根据查询结果定义一个新表。

概要

[ 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 [, ...]]
    [{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] 
    [...]]

描述

SELECT INTO创建一个新表,并用查询计算的数据填充该表。 数据不会像常规SELECT一样返回给客户端。 新表的列具有与SELECT的输出列关联的名称和数据类型。

参数

SELECT INTO的大多数参数与SELECT相同。

TEMPORARY
TEMP
如果指定,该表将创建为临时表。
UNLOGGED
如果指定,该表将创建为不计入日志表。 写入不计入日志表的数据不会写入预写(WAL)日志,这使它们比普通表快得多。 但是,不计入日志表的内容不会复制到mirror实例。 同样,不计入日志表也不是崩溃安全的。 segment实例崩溃或异常关闭后,该segment上不计入日志表的数据将被截断。 在不计入日志表上创建的所有索引也会自动取消计入日志。
new_table
要创建的表的名称(可以用schema修饰)。

示例

创建一个新表films_recent,该表仅包含表films中的最新条目:

SELECT * INTO films_recent FROM films WHERE date_prod >= '2016-01-01';

兼容性

SQL标准使用SELECT INTO表示将值选择到主机程序的标量变量中,而不是创建新表。 SELECT INTO在Greenplum数据库中用于表示表创建的用法是历史性的。 为此,最好在新应用程序中使用CREATE TABLE AS