CREATE FOREIGN TABLE
CREATE FOREIGN TABLE¶
定义一个新的外部表。
- 语法
- ``` sql
CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [
column_name data_type [ OPTIONS ( option 'value' [, … ] ) ] [ COLLATE collation ] [ column_constraint [ … ] ]
[, … ]
] )
SERVER server_name
[ OPTIONS ( [ mpp_execute { 'coordinator' | 'any' | 'all executors' } [, ] ] option 'value' [, … ] ) ]
其中`column_constraint`为: ``` sql [ CONSTRAINT constraint_name ] { NOT NULL | NULL | DEFAULT default_expr }
- 描述
-
CREATE FOREIGN TABLE
在当前数据库中创建一个新的外部表。 创建外部表的用户将成为其所有者。如果您对表名称进行模式限定(例如,
CREATE FOREIGN TABLE myschema.mytable ...
),则SeaboxMPP数据库将在指定模式中创建表。 否则,将在当前模式中创建外部表。外部表的名称必须与同一模式中任何其他外部表,表,序列,索引或视图的名称不同。因为
CREATE FOREIGN TABLE
自动创建一种数据类型,该数据类型表示与外部表的一行相对应的复合类型,所以外部表不能与同一模式中的任何现有数据类型具有相同的名称。要创建外部表,您必须在外部服务器上具有
USAGE
权限, 并且对表中使用的所有列类型都具有USAGE
权限。 - 参数
-
该SQL命令参数说明见下
IF NOT EXISTS
-
如果已经存在同名关系,则不要抛出错误。 在这种情况下,SeaboxMPP数据库会发出通知。
请注意,不能保证现有关系类似于将要创建的关系。
table_name
- 要创建的外部表的名称(可以由模式指定)。
column_name
- 在新的外部表中创建的列的名称。
data_type
- 列的数据类型,包括数组说明符。
NOT NULL
- 该列不允许包含空值。
NULL
-
该列允许包含空值。这是默认值。
提供此子句仅是为了与非标准SQL数据库兼容。不建议在新应用中使用它。
DEFAULT default_expr
-
DEFAULT
子句为其定义所在的列分配默认值。该值是任何无变量表达式;SeaboxMPP数据库不允许子查询和对当前表中其他列的交叉引用。默认表达式的数据类型必须与列的数据类型匹配。SeaboxMPP数据库在未为列指定值的任何插入操作中使用默认表达式。 如果列没有默认值,则默认值为null。
server_name
- 用于外部表的现有服务器的名称。 有关定义服务器的详细信息,请参见
CREATE SERVER
。 OPTIONS ( option 'value' \[, ... \] )
- 新外部表或其列之一的选项。 虽然选项名称必须唯一,但表选项和列选项可能具有相同的名称。 选项名称和值是特定于外部数据包装程序的。
SeaboxMPP数据库使用外部数据包装程序的
validator_function
验证选项和值。 mpp_execute { 'coordinator' | 'any' | 'all executors' }
-
一个选项,用于标识外部数据包装器从其请求数据的主机:
-
coordinator
(默认设置)- 从coordinator主机请求数据。 -
any
— 向coordinator主机或任一executor请求数据,具体取决于哪条路径的成本更低。 -
all executors
— 从所有executor中请求数据。要支持此选项值,外部数据包装器必须具有将executor与数据匹配的策略。
外部表
mpp_execute
选项和受支持的特定模式的使用是特定于外部数据包装器的。可以在多个命令中指定
mpp_execute
选项:CREATE FOREIGN TABLE
,CREATE SERVER
和CREATE FOREIGN DATA WRAPPER
。外部表设置优先于外部服务器设置,然后是外部数据包装器设置。
-
- 示例
-
使用名为
film_server
的服务器创建一个名为films
的外部表: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
一样,SeaboxMPP数据库允许NULL
约束和零列外部表。指定默认值的功能是SeaboxMPP数据库扩展,以及mpp_execute
选项。- 相关SQL命令
ALTER FOREIGN TABLE
,DROP FOREIGN TABLE
,CREATE TABLE
,CREATE SERVER