CREATE FOREIGN TABLE

定义一个新的外表。

概要

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 { 'master' | 'any' | 'all segments' } [, ] ] option 'value' [, ... ] ) ]

其中column_constraint为:

[ CONSTRAINT constraint_name ]
{ NOT NULL |
  NULL |
  DEFAULT default_expr }

描述

CREATE FOREIGN TABLE在当前数据库中创建一个新的外部表。 创建外部表的用户将成为其所有者。

如果您对表名称进行模式限定(例如,CREATE FOREIGN TABLE myschema.mytable ...), 则MatrixDB数据库将在指定模式中创建表。 否则,将在当前模式中创建外部表。 外部表的名称必须与同一模式中任何其他外部表,表,序列,索引或视图的名称不同。

因为CREATE FOREIGN TABLE自动创建一种数据类型, 该数据类型表示与外部表的一行相对应的复合类型,所以外部表不能与同一模式中的任何现有数据类型具有相同的名称。

要创建外部表,您必须在外部服务器上具有USAGE特权, 并且对表中使用的所有列类型都具有USAGE特权。

参数

IF NOT EXISTS

  • 如果已经存在同名关系,则不要抛出错误。 在这种情况下,MatrixDB数据库会发出通知。 请注意,不能保证现有关系类似于将要创建的关系。

table_name

  • 要创建的外部表的名称(可以由模式指定)。

column_name

  • 在新的外部表中创建的列的名称。

data_type

  • 列的数据类型,包括数组说明符。

NOT NULL

  • 该列不允许包含空值。

NULL

  • 该列允许包含空值。这是默认值。
    提供此子句仅是为了与非标准SQL数据库兼容。不建议在新应用中使用它。

DEFAULT default_expr

  • DEFAULT子句为其定义所在的列分配默认值。 该值是任何无变量表达式;MatrixDB数据库不允许子查询和对当前表中其他列的交叉引用。 默认表达式的数据类型必须与列的数据类型匹配。
    MatrixDB数据库在未为列指定值的任何插入操作中使用默认表达式。 如果列没有默认值,则默认值为null。

server_name

  • 用于外部表的现有服务器的名称。

OPTIONS ( option 'value' [, ... ] )

  • 新外部表或其列之一的选项。 虽然选项名称必须唯一,但表选项和列选项可能具有相同的名称。 选项名称和值是特定于外部数据包装程序的。 MatrixDB数据库使用外部数据包装程序的validator_function验证选项和值。

mpp_execute { 'master' | 'any' | 'all segments' }

  • 一个选项,用于标识外部数据包装器从其请求数据的主机:
    • master (默认设置)- 从master主机请求数据。
    • any — 向master主机或任一segment请求数据,具体取决于哪条路径的成本更低。
    • all segments — 从所有segment中请求数据。 要支持此选项值,外部数据包装器必须具有将segment与数据匹配的策略。
  • 外部表mpp_execute选项和受支持的特定模式的使用是特定于外部数据包装器的。

示例

使用名为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一样,MatrixDB数据库允许NULL约束和零列外部表。 指定默认值的功能是MatrixDB数据库扩展,以及mpp_execute选项。

另见

ALTER FOREIGN TABLE, DROP FOREIGN TABLE, ALTER TABLE