VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

CREATE FOREIGN TABLE

功能描述

创建外表。

数据库的外表,也被称为foreign table,是一种特殊类型的表对象,允许用户访问和操作存储在外部源中的数据。这些外部源可以是其他的数据库管理系统,例如Oracle、MySQL等,也可以是文件系统。从本质上讲,外表与普通表非常相似,可以使用SELECT等SQL命令进行查询。然而,与普通表的主要区别在于数据的存储位置。外表的数据并不直接存储在数据库内部,而是存储在文件系统或其他外部系统中。这意味着,对于外表的操作通常是只读的,不能直接修改其数据。为了维护数据的一致性,任何对外表的更改都应在原始数据源中进行。

注意事项

  • 外表中暂不支持使用系统列(如tableoid、ctid等),其中Private和Shares模式的外表,需要初始用户和运维模式下(operation_mode)的运维管理员权限。

  • 不支持使用default values。

语法格式

CREATE FOREIGN TABLE [ IF NOT EXISTS  ] table_name ( { 
    column_name type_name POSITION ( offset, length ) 
        | LIKE source_table  [, ...] )
        SEVER gsmpp_server
        OPTIONS (  { option_name ' value '  }  [, ...] )
        [ { WRITE ONLY  |  READ ONLY  }]
        [ WITH error_table_name | LOG INTO error_table_name ]
        [ REMOTE LOG 'name' ]
        [PER NODE REJECT LIMIT 'value']
        [ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ];
CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( { 
    column_name type_name
    [ { [CONSTRAINT constraint_name] NULL |
    [CONSTRAINT constraint_name] NOT NULL }]}[, ...] )
        SERVER server_name
        OPTIONS ( { option_name ' value ' } [, ...] )
        DISTRIBUTE BY {ROUNDROBIN | REPLICATION}
        [ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ]
        [ PARTITION BY ( column_name ) [AUTOMAPPED]] ;
CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [ { 
    column_name type_name | LIKE source_table } [, ...] ] )
        SERVER server_name
        OPTIONS ( { option_name ' value ' } [, ...] )
        [ READ ONLY ]
        [ DISTRIBUTE BY {ROUNDROBIN} ]
        [ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ];

参数说明

  • IF NOT EXISTS

    如果已经存在相同名称的表,不会抛出一个错误,而会发出一个通知,告知表关系已存在。

  • table_name

    外表的表名。

    取值范围:字符串,要符合标识符的命名规范。

  • column_name

    外表中的字段名。

    取值范围:字符串,要符合标识符的命名规范。

  • type_name

    字段的数据类型。

  • SERVER server_name

    外表的server名称。默认值为mot_server。

  • OPTIONS ( option 'value' [, … ] )

    选项与新外表或外表中的字段有关。允许的选项名称和值,是由每一个外部数据封装器指定的。 也是通过外部数据封装器的验证函数来验证。重复的选项名称是不被允许的(尽管表选项和表字段选项可以有相同的名字)。

    • oracle_fdw支持的options包括:

      • table:Oracle server侧的表名。需要同oracle系统表中记录的表名完全一致,通常是由大写字符组成。

      • schema:表所对应的schema(或owner)。需要同Oracle系统表中记录的表名完全一致,通常是由大写字符组成。

    • mysql_fdw支持的options包括:

      • dbname:MySQL的database名称。
      • table_name:MySQL侧的表名。
    • postgres_fdw支持的options包括:

      • schema_name:远端server的schema名称。如果不指定的话,将使用外表自身的schema名称作为远端的schema名称。
      • table_name:远端server的表名。如果不指定的话,将使用外表自身的表名作为远端的表名。
      • column_name:远端server的表的列名。如果不指定的话,将使用外表自身的列名作为远端的的表的列名。
    • file_fdw支持的options包括:

      • filename:指定要读取的文件,必需的参数,且必须是一个绝对路径名。
      • format:远端server的文件格式,支持text/csv/binary/fixed四种格式,和COPY语句的FORMAT选项相同。
      • header:指定的文件是否有标题行,与COPY语句的HEADER选项相同。
        • delimiter:指定文件的分隔符,与COPY的DELIMITER选项相同。
        • quote: 指定文件的引用字符,与COPY的QUOTE选项相同。
        • escape:指定文件的转义字符,与COPY的ESCAPE选项相同。
        • null: 指定文件的null字符串,与COPY的NULL选项相同。
        • encoding:指定文件的编码,与COPY的ENCODING选项相同。
        • force_not_null:这是一个布尔选项。如果为真,则声明字段的值不应该匹配空字符串(也就是文件级别null选项)。与COPY的 FORCE_NOT_NULL选项里的字段相同。
    • jdbc_fdw支持的options包括:

      • table_name:远端的表名。
      • query:指定要查询的select语句。

示例

参见Oracle_FDWMySQL_FDWJDBC_FDWPostgres_FDW的示例。

相关链接

ALTER FOREIGN TABLEDROP FOREIGN TABLE