创建表为

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

Synopsis

CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name
    [ (column_name [, ...] ) ]
    [ WITH ( storage_parameter [= value] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]
    [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
    [ TABLESPACE tablespace_name ]
    AS query
    [ WITH [ NO ] DATA ]

Description

CREATE TABLE AS创建一个表,并用SELECT命令计算出的数据填充该表。表列具有与SELECT的输出列关联的名称和数据类型(但可以通过提供新列名的显式列表来覆盖列名)。

CREATE TABLE AS与创建视图有些相似,但实际上是完全不同的:它创建一个新表并仅对查询进行一次评估以最初填充新表。新表将不会跟踪对查询源表的后续更改。相反,无论何时查询,视图都会重新评估其定义的SELECT语句。

Parameters

Notes

该命令在功能上类似于SELECT INTO,但是它是首选的,因为它不太可能与SELECT INTO语法的其他用法混淆。此外,CREATE TABLE AS提供SELECT INTO提供的功能的超集。

CREATE TABLE AS命令允许用户明确指定是否应包含 OID。如果未明确指定 OID 的存在,则使用default_with_oids配置变量。

Examples

创建一个仅由表films的最新条目组成的新表films_recent

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

要完全复制表,还可以使用使用TABLE命令的缩写形式:

CREATE TABLE films2 AS
  TABLE films;

使用准备好的语句创建一个仅由表films的最新条目组成的新临时表films_recent。新表具有 OID,并将在提交时删除:

PREPARE recentfilms(date) AS
  SELECT * FROM films WHERE date_prod > $1;
CREATE TEMP TABLE films_recent WITH (OIDS) ON COMMIT DROP AS
  EXECUTE recentfilms('2002-01-01');

Compatibility

CREATE TABLE AS符合 SQL 标准。以下是非标准扩展:

See Also

创建材料视图, CREATE TABLE, EXECUTE, SELECT, SELECT INTO, VALUES

上一章 首页 下一章