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。