外部表

表示外部数据源上表的数据库对象

一个外部表是一个数据库对象,它表示存在于外部数据源(可能是另一个 PostgreSQL 节点或完全不同的系统)上的表,并通过外部数据包装器 (FDW) 访问。

外部表可以像普通表一样查询,并且根据 FDW 实现,可以使用INSERTUPDATEDELETE 命令进行修改。但是,与本机 PostgreSQL 表相比,外部表提供的灵活性与性能之间存在权衡。

外部表PostgreSQL 9.1开始可用。

创建外部表

在创建外部表之前,必须安装相应的外部数据包装器,并创建一个外部服务器来定义到远程数据源的连接。通常还需要用户映射,它允许本地 PostgreSQL 用户访问远程数据源。

在定义外部表时,可以提供表和列级别的选项,这些选项通常可以将 PostgreSQL 中的表/列名称映射到远程数据源上的名称,并且根据 FDW 实现,还可以指定其他设置,例如远程表是否可以更新。

还可以使用IMPORT FOREIGN SCHEMA 命令从远程数据源自动导入外部表,尽管这取决于远程数据源是否适合此类操作(例如,对于基于文件的file_fdw 从文件中提取架构是不可行的)以及各个FDW提供的实现。

外部表作为分区

PostgreSQL 11开始,外部表可以作为分区表附加,尽管存在某些限制/约束

  • 外部数据包装器必须支持元组路由
  • 无法验证外部表中的所有行是否都遵守分区约束
  • 如果父表上存在任何唯一索引,则无法创建/附加外部表作为父表的子分区
  • 可以将行从本地分区移动到外部表分区,但不能将它们从外部表分区移动到另一个分区

转储外部表数据

PostgreSQL 13开始,pg_dump可以使用--include-foreign-data选项选择性地转储外部表中的数据。

限制

示例

使用postgres_fdw创建简单的“环回”外部表,该表实际上引用同一服务器上的表

postgres=# CREATE EXTENSION postgres_fdw;
CREATE EXTENSION

postgres=# CREATE SERVER fdw_test
             FOREIGN DATA WRAPPER postgres_fdw
             OPTIONS (
               host 'localhost',
               port '5432',
               dbname 'postgres'
            );
postgres=# CREATE USER MAPPING FOR CURRENT_USER SERVER fdw_test
             OPTIONS(user 'postgres');
CREATE USER MAPPING

postgres=# CREATE FOREIGN TABLE bar (
             f_id INT  OPTIONS (column_name 'id') NOT NULL,
             f_val TEXT  OPTIONS (column_name 'val')
           )
           SERVER fdw_test
           OPTIONS (table_name 'foo');
CREATE FOREIGN TABLE

postgres=# \det
     List of foreign tables
 Schema |    Table    |  Server  
--------+-------------+----------
 public | bar         | fdw_test
(1 row)

postgres=# \d bar
                       Foreign table "public.bar"
 Column |  Type   | Collation | Nullable | Default |     FDW options     
--------+---------+-----------+----------+---------+---------------------
 f_id   | integer |           | not null |         | (column_name 'id')
 f_val  | text    |           |          |         | (column_name 'val')
Server: fdw_test
FDW options: (table_name 'foo')

分类

外部数据包装器 (FDW)

另请参阅

CREATE FOREIGN TABLECREATE SERVERCREATE USER MAPPINGpg_foreign_table

反馈

提交任何关于"外部表"的评论、建议或更正 在此处