↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.4
历史版本。 PostgreSQL 8.0 已结束支持。 请参阅 当前版本手册.

CREATE TABLE AS

CREATE TABLE AS — 根据查询结果定义一个新表

大纲

CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name
    [ (column_name [, ...] ) ] [ [ WITH | WITHOUT ] OIDS ]
    AS query

描述

CREATE TABLE AS创建一个表,并用 SELECT命令或运行已预备的SELECT 命令的EXECUTE计算得到的数据填充该表。该表的列具有与SELECT输出列对应的名称和数据类型(但可以通过显式给出新的列名列表来覆盖列名)。

CREATE TABLE AS与创建视图有些相似,但实际上差异很大:它会创建一个新表,并且只执行一次该查询来完成新表的初始填充。这个新表不会跟踪该查询所引用源表的后续变化。相比之下,视图每次被查询时都会重新执行其定义中的 SELECT语句。

参数

GLOBAL or LOCAL

出于兼容性考虑会被忽略。详见CREATE TABLE。

TEMPORARY or TEMP

如果指定,将把该表创建为临时表。详见CREATE TABLE。

table_name

要创建的表名(可选地带模式限定)。

column_name

新表中某一列的名称。如果未提供列名,则采用查询输出列的列名。如果表是从 EXECUTE 命令创建的,则不能指定列名列表。

WITH OIDS
WITHOUT OIDS

这个可选子句指定CREATE TABLE AS创建的表是否应包含 OID。如果未指定该子句的任何一种形式,则使用default_with_oids配置参数的值。

query

一条查询语句(也就是一个SELECT命令,或一个运行已预备的SELECT命令的EXECUTE 命令)。所允许语法的描述请分别参阅SELECT或EXECUTE。

注解

这个命令在功能上类似于SELECT INTO,但更推荐使用它,因为它更不容易与SELECT INTO语法的其他用法相混淆。此外,CREATE TABLE AS提供的功能是SELECT INTO所提供功能的超集。

在 PostgreSQL 8.0 之前,CREATE TABLE AS创建的表总是包含 OID。从 PostgreSQL 8.0 起,CREATE TABLE AS命令允许用户显式指定是否包含 OID。如果未显式指定是否存在 OID,则使用default_with_oids配置变量。虽然该变量目前的默认值为 true,但这一默认值将来可能会改变。因此,需要在CREATE TABLE AS所创建表中包含 OID 的应用,应显式指定WITH OIDS,以确保与未来版本的PostgreSQL兼容。

示例

创建一个新表films_recent,其中只包含表 films中的近期条目:

CREATE TABLE films_recent AS
  SELECT * FROM films WHERE date_prod >= '2002-01-01';

兼容性

CREATE TABLE AS由 SQL:2003 标准指定。该命令在 SQL:2003 中的定义与它在 PostgreSQL中的实现之间存在一些小的差异:

  • 标准要求在子查询子句外围加括号;在 PostgreSQL中,这些括号是可选的。

  • 标准定义了ON COMMIT子句;目前 PostgreSQL尚未实现它。

  • 标准定义了WITH DATA子句;目前 PostgreSQL尚未实现它。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.