↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 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 已于 2010 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

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尚未实现它。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。