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 支持的数据类型的更多信息, 请参考Chapter 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标准的扩展。