💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# CREATE FOREIGN TABLE ## Name CREATE FOREIGN TABLE -- 定义一个新外部表 ## Synopsis ``` 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 支持的数据类型的更多信息, 请参考[Chapter 8](#calibre_link-5)。 `NOT NULL` 该字段不允许包含null值。 `NULL` 该字段允许包含null值。 这是缺省。 这个子句的存在只是为和那些非标准 SQL 数据库兼容。 我们不建议在新应用中使用它。 `DEFAULT` `_default_expr_` `DEFAULT` 子句给它所出现的字段设定一个缺省数值。该数值可以是任何不含变量的表达式(不允许使用子查询和对本表中的其它字段的交叉引用)。缺省表达式的数据类型必须和字段类型匹配。 缺省表达式将被用于任何未指定该字段数值的插入操作。 如果字段上没有缺省值,那么缺省是 NULL。 `_server_name_` 外部表使用的已存在的外部服务器名称。更多细节,参考[CREATE SERVER](#calibre_link-6)。 `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`](#calibre_link-7),`NULL`约束和 零字段外部表以及设定默认值的功能是PostgreSQL对SQL标准的扩展。 ## See Also [ALTER FOREIGN TABLE](#calibre_link-8), [DROP FOREIGN TABLE](#calibre_link-9), [CREATE TABLE](#calibre_link-7), [CREATE SERVER](#calibre_link-6)