pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
SELECT INTO — 从一个 SELECT 的结果创建一个新表
SELECT [ ALL | DISTINCT [ ON (expression[, ...] ) ] ] * |expression[ ASoutput_name] [, ...] INTO [ TEMPORARY | TEMP ] [ TABLE ]new_table[ FROMfrom_item[, ...] ] [ WHEREcondition] [ GROUP BYexpression[, ...] ] [ HAVINGcondition[, ...] ] [ { UNION | INTERSECT | EXCEPT [ ALL ] }select] [ ORDER BYexpression[ ASC | DESC | USINGoperator] [, ...] ] [ FOR UPDATE [ OFtablename[, ...] ] ] [ LIMIT {count| ALL } [ { OFFSET | , }start]] wherefrom_itemcan be: [ ONLY ]table_name[ * ] [ [ AS ]alias[ (column_alias_list) ] ] | (select) [ AS ]alias[ (column_alias_list) ] |from_item[ NATURAL ]join_typefrom_item[ ONjoin_condition| USING (join_column_list) ]
如果指定了 TEMPORARY 或 TEMP, 输出表只在本次会话中创建,并在 会话退出时自动删除。 在临时表存在期间,(本会话中) 同名的现有永久表不可见。 在临时表上创建的任何索引也自动 是临时的。
new_table要创建的新表的名称。 该表必须尚不存在。但可以创建与现有永久表 同名的临时 表。
所有其他输入在 SELECT 中有 详细描述。
可能的输出消息的摘要请参阅 CREATE TABLE 和 SELECT 。
SELECT INTO 创建一个新表,并用查询 计算出的数据填充它。与普通的 SELECT 不同,数据不返回给 客户端。新表的列具有与 SELECT 的输出列相关联的名称和 数据类型。
CREATE TABLE AS 在功能上等价于 SELECT INTO。推荐使用 CREATE TABLE AS 语法,因为 SELECT INTO 不是标准的。事实上,这种形式的 SELECT INTO 在 PL/pgSQL 或 ecpg 中 不可用,因为它们对 INTO 子句的解释 不同。
SQL92 用 SELECT ... INTO 表示把值选择到宿主程序的 标量变量中,而不是创建 新表。这确实是 PL/pgSQL 和 ecpg 中的用法。 Postgres 用 SELECT INTO 表示创建表是历史 遗留。在新代码中最好用 CREATE TABLE AS 来实现 这一目的。(CREATE TABLE AS 也不是 标准的,但它不太容易造成 混淆。)
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。