CREATE FOREIGN TABLE

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 ...), 则Greenplum数据库将在指定模式中创建表。 否则,将在当前模式中创建外部表。 外部表的名称必须与同一模式中任何其他外部表,表,序列,索引或视图的名称不同。

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

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

参数

IF NOT EXISTS

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

table_name

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

column_name

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

data_type

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

NOT NULL

该列不允许包含空值。

NULL

该列允许包含空值。这是默认值。

提供此子句仅是为了与非标准SQL数据库兼容。不建议在新应用中使用它。

DEFAULT default_expr

DEFAULT子句为其定义所在的列分配默认值。 该值是任何无变量表达式;Greenplum数据库不允许子查询和对当前表中其他列的交叉引用。 默认表达式的数据类型必须与列的数据类型匹配。

Greenplum数据库在未为列指定值的任何插入操作中使用默认表达式。 如果列没有默认值,则默认值为null。

server_name

用于外部表的现有服务器的名称。 有关定义服务器的详细信息,请参见CREATE SERVER

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

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

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

外部表mpp_execute选项和受支持的特定模式的使用是特定于外部数据包装器的。

可以在多个命令中指定mpp_execute选项: CREATE FOREIGN TABLECREATE SERVERCREATE 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一样,Greenplum数据库允许NULL约束和零列外部表。 指定默认值的功能是Greenplum数据库扩展,以及mpp_execute选项。