# 创建表为
CREATE TABLE AS — 根据查询结果定义新表
# 概要
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name
[ (column_name [, ...] ) ]
[ USING method ]
[ WITH ( storage_parameter [= value] [, ... ] ) | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace_name ]
AS query
[ WITH [ NO ] DATA ]
# 描述
创建表为
创建一个表并用由 a 计算的数据填充它选择
命令。表列具有与输出列关联的名称和数据类型选择
(除了您可以通过提供新列名的显式列表来覆盖列名)。
创建表为
与创建视图有一些相似之处,但实际上完全不同:它创建一个新表并只评估一次查询以填充新表。新表不会跟踪查询的源表的后续更改。相反,视图重新评估其定义选择
查询时声明。
创建表为
需要创建
对用于表的架构的特权。
# 参数
全球的
要么当地的
为了兼容性而忽略。不推荐使用这些关键字;参考创建表详情。
暂时的
要么温度
如果指定,则将该表创建为临时表。参考创建表详情。
未记录
如果指定,则将该表创建为未记录的表。参考创建表详情。
如果不存在
如果已存在同名关系,则不要抛出错误。在这种情况下发出通知。参考创建表详情。
表名
要创建的表的名称(可选的模式限定)。
列名
新表中列的名称。如果未提供列名,则它们取自查询的输出列名。
使用 *
方法*
此可选子句指定用于存储新表内容的表访问方法;该方法需要是类型的访问方法桌子
.看第61章了解更多信息。如果未指定此选项,则为新表选择默认表访问方法。看默认_桌子_使用权_方法了解更多信息。
和 ( *
存储参数* [= *
价值*] [, ... ])
该子句指定新表的可选存储参数;看存储参数在里面创建表文档以获取更多信息。为了向后兼容和
表的子句还可以包括OIDS=假
指定新表的行不应包含 OID(对象标识符),OIDS=真
不再支持。
没有 OID
这是用于声明表的向后兼容语法没有 OID
, 创建一个表与 OIDS
不再支持。
提交时
事务块末尾的临时表的行为可以通过使用来控制提交时
.这三个选项是:
保留行
交易结束时不采取特殊行动。这是默认行为。
删除行
临时表中的所有行将在每个事务块结束时被删除。本质上,一个自动截短
在每次提交时完成。
降低
临时表将在当前事务块的末尾被删除。
表空间 *
表空间名称*
这*表空间名称
*是要在其中创建新表的表空间的名称。如果没有指定,默认_表空间被咨询,或温度_表空间如果表是临时的。
询问
一种选择
,桌子
, 要么价值观
命令,或执行
运行准备好的命令选择
,桌子
, 或者价值观
询问。
有 [ 无 ] 数据
此子句指定查询产生的数据是否应复制到新表中。如果不是,则仅复制表结构。默认是复制数据。
# 笔记
此命令在功能上类似于选择进入,但它是首选,因为它不太可能与其他用途混淆选择进入
句法。此外,创建表为
提供了由选择进入
.
# 例子
创建一个新表电影_最近
仅由表中的最近条目组成电影
:
CREATE TABLE films_recent AS
SELECT * FROM films WHERE date_prod >= '2002-01-01';
要完全复制表格,使用桌子
也可以使用命令:
CREATE TABLE films2 AS
TABLE films;
创建一个新的临时表电影_最近
,仅由表中的最近条目组成电影
,使用准备好的语句。新表将在提交时被删除:
PREPARE recentfilms(date) AS
SELECT * FROM films WHERE date_prod > $1;
CREATE TEMP TABLE films_recent ON COMMIT DROP AS
EXECUTE recentfilms('2002-01-01');
# 兼容性
创建表为
符合 SQL 标准。以下是非标准扩展:
该标准要求在子查询子句周围加上括号;在 PostgreSQL 中,这些括号是可选的。
在标准中,
有 [ 无 ] 数据
条款是必需的;在 PostgreSQL 中它是可选的。PostgreSQL 处理临时表的方式与标准不同;看创建表详情。
这
和
子句是 PostgreSQL 扩展;存储参数不在标准中。表空间的 PostgreSQL 概念不是标准的一部分。因此,该条款
表空间
是一个扩展。