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特权。
已经存在同名关系时不要抛出错误。这种情况下会发出一个提示。注意, 并不保证已经存在的关系与将要创建的那一个相似。
要创建的表的名称(可以被模式限定)。
要在新表中创建的列名。
该列的数据类型。可以包括数组指示符。更多 PostgreSQL支持的数据类型可见Chapter 8。
该列不允许包含空值。
该列可以包含空值,这是默认值。
提供这个子句只是为了兼容非标准的 SQL 数据库。在新的应用中 不鼓励使用它。
DEFAULT子句为包含它的列定义赋予一个默认数据值。该 值是任意不包含变量的表达式(不允许子查询和对当前表中其他列的交叉 引用)。默认值表达式的数据类型必须匹配列的数据类型。
默认值表达式将被用在任何没有指定列值的插入操作中。如果一列没有 默认值,则默认值为空值。
要用于该外部表的一个现有外部服务器的名称。有关定义一个服务器 的细节可以参考CREATE SERVER。
要与新外部表或者它的一个列相关联的选项。被允许的选项名称和值是与 每一个外部数据包装器相关的,并且它们会被该外部数据包装器的验证器 函数验证。不允许重复的选项名称(不过一个表选项和一个列选项重名是 可以的)。
创建外部表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扩展。