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在当前数据库中创建一个外部表,该表将由发出此命令的用户所有。

如果给出了模式名 (for example, CREATE FOREIGN TABLE myschema.mytable ...) ,那么表是在指定模式中创建的。否则在当前模式中创建外部表。 外部表的名字必须与同一个模式中的其它外部表,表,序列,索引或试图的名字不同

CREATE FOREIGN TABLE还自动创建一个数据类型,该数据类型代表对应该外部表一行的复合类型。 因此,外部表不能和同模式中的现有数据类型同名。

为了创建一个外部表,除了对外部表所有字段类型有 USAGE权限外, 还必须有外部表服务器的USAGE权限。

参数

IF NOT EXISTS

如果已经存在相同名称的对象,在这种情况下,不会抛出错误,只会产生一个通知。 请注意这并不保证将要创建的对象与现有对象是否一致。

table_name

要创建的表的名字(可以用模式修饰)。

column_name

新表中要创建的字段名。

data_type

该字段的数据类型. 它可以包含数组说明符。有关 PostgreSQL 支持的数据类型的更多信息, 请参考第 8 章

NOT NULL

该字段不允许包含null值。

NULL

该字段允许包含null值。 这是缺省。

这个子句的存在只是为和那些非标准 SQL 数据库兼容。 我们不建议在新应用中使用它。

DEFAULT default_expr

DEFAULT 子句给它所出现的字段设定一个缺省数值。该数值可以是任何不含变量的表达式(不允许使用子查询和对本表中的其它字段的交叉引用)。缺省表达式的数据类型必须和字段类型匹配。

缺省表达式将被用于任何未指定该字段数值的插入操作。 如果字段上没有缺省值,那么缺省是 NULL。

server_name

外部表使用的已存在的外部服务器名称。更多细节,参考CREATE SERVER

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

选项与新外部表或外部表中的字段有关。允许的选项名称和值,是由每一个外部数据封装器中来说是特别指定的。 也是通过外部数据封装器的验证函数来验证。重复的选项名称是不被允许的(尽管表选项和表字段选项可以有相同的名字)。

例子

创建外部表 films, 该表通过服务器 film_server访问:

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对SQL标准的扩展。

See Also

ALTER FOREIGN TABLE, DROP FOREIGN TABLE, CREATE TABLE, CREATE SERVER