选择 打开 改范围 完整检索页

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

CREATE FOREIGN TABLE

CREATE FOREIGN TABLE — 定义一个新外部表

大纲

CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [
    column_name data_type [ OPTIONS ( option 'value' [, ... ] ) ] [ COLLATE collation ] [ column_constraint [ ... ] ]
    [, ... ]
] )
  SERVER server_name
[ OPTIONS ( option 'value' [, ... ] ) ]

其中 column_constraint 是:

[ CONSTRAINT constraint_name ]
{ NOT NULL |
  NULL |
  DEFAULT default_expr }

描述

CREATE FOREIGN TABLE将在当前数据库中创建一个新的外部表。该表归发出该命令的用户所有。

如果给出了模式名(例如 CREATE FOREIGN TABLE myschema.mytable ...),则表将在指定模式中创建。 否则,它将在当前模式中创建。 外部表名必须与同一模式中任何其他关系(表、序列、索引、视图、物化视图或外部表)的名称不同。

CREATE FOREIGN TABLE还会自动创建一种数据类型,用以表示与该外部表一行对应的复合类型。因此,外部表名不能与同一模式中任何已有数据类型同名。

要创建外部表,必须拥有该外部服务器上的USAGE权限,以及表中所用所有列类型上的USAGE权限。

参数

IF NOT EXISTS

已经存在同名关系时不要抛出错误。这种情况下会发出一个提示。注意, 已存在的关系不保证与原本将要创建的关系有任何相似之处。

table_name

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

column_name

要在新表中创建的列名。

data_type

该列的数据类型,可以包含数组说明符。有关PostgreSQL支持的数据类型的更多信息,参见第 8 章

NOT NULL

该列不允许包含空值。

NULL

该列允许包含空值。这是默认行为。

此子句仅用于与非标准 SQL 数据库兼容。在新应用程序中不建议使用。

DEFAULT default_expr

DEFAULT子句为其所在列定义对应的列分配一个默认数据值。该值可以是任何不包含变量的表达式(不允许包含子查询或对当前表中其他列的交叉引用)。默认表达式的数据类型必须与列的数据类型匹配。

在任何未为该列指定值的插入操作中,将使用默认表达式。如果列没有默认值,则默认值为 null。

server_name

要用于外部表的现有外部服务器的名称。有关定义服务器的详细信息,请参阅 CREATE SERVER

OPTIONS ( option 'value' [, ...] )

与新外部表或其某一列关联的选项。允许的选项名称和值取决于每个外部数据包装器,并通过外部数据包装器的验证函数进行验证。不允许重复的选项名称(尽管表选项和列选项具有相同名称是可以接受的)。

示例

创建通过服务器film_server访问的外部表films

CREATE FOREIGN TABLE films (
    code        char(5) NOT NULL,
    title       varchar(40) NOT NULL,
    did         integer NOT NULL,
    date_prod   date,
    kind        varchar(10),
    len         interval hour to minute
)
SERVER film_server;

兼容性

CREATE FOREIGN TABLE 命令在很大程度上符合 SQL 标准;然而,与 CREATE TABLE 类似,允许使用 NULL 约束和零列外部表。指定列默认值的能力也是 PostgreSQL 的扩展。

提交更正

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