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

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.1 已于 2010 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

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配置变量。而从 PostgreSQL 8.1 起,该变量默认为 false,因此默认行为与 8.0 之前的发行版不再相同。需要在CREATE TABLE AS所创建表中包含 OID 的应用,应显式指定WITH OIDS以确保所需行为。

示例

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

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

兼容性

CREATE TABLE AS符合SQL标准,但有以下例外:

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

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

  • 标准定义了WITH [ NO ] DATA子句;目前 PostgreSQL尚未实现它。 PostgreSQL提供的行为等同于标准中的 WITH DATA情形。

  • WITH/WITHOUT OIDS是 PostgreSQL的扩展。

  • PostgreSQL处理临时表的方式与标准有 相当大的不同;详见CREATE TABLE。

提交更正

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