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权限。
如果已经存在相同名称的对象,在这种情况下,不会抛出错误,只会产生一个通知。 请注意这并不保证将要创建的对象与现有对象是否一致。
要创建的表的名字(可以用模式修饰)。
新表中要创建的字段名。
该字段的数据类型. 它可以包含数组说明符。有关 PostgreSQL 支持的数据类型的更多信息, 请参考第 8 章。
该字段不允许包含null值。
该字段允许包含null值。 这是缺省。
这个子句的存在只是为和那些非标准 SQL 数据库兼容。 我们不建议在新应用中使用它。
DEFAULT 子句给它所出现的字段设定一个缺省数值。该数值可以是任何不含变量的表达式(不允许使用子查询和对本表中的其它字段的交叉引用)。缺省表达式的数据类型必须和字段类型匹配。
缺省表达式将被用于任何未指定该字段数值的插入操作。 如果字段上没有缺省值,那么缺省是 NULL。
外部表使用的已存在的外部服务器名称。更多细节,参考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对SQL标准的扩展。