From c1846d84ba562343b74af37fff6c80ac257dbb32 Mon Sep 17 00:00:00 2001 From: TotaJ Date: Sat, 15 Aug 2020 15:04:17 +0800 Subject: [PATCH] postgres_fdw. --- .../Developerguide/ALTER-FOREIGN-TABLE.md | 13 ++++++++ .../zh/docs/Developerguide/ALTER-SERVER.md | 29 +++++++++++++++++ .../docs/Developerguide/ALTER-USER-MAPPING.md | 10 ++++++ .../Developerguide/CREATE-FOREIGN-TABLE.md | 14 ++++++++ .../zh/docs/Developerguide/CREATE-SERVER.md | 32 ++++++++++++++++++- .../Developerguide/CREATE-USER-MAPPING.md | 10 ++++++ .../Developerguide/Foreign-Data-Wrapper.md | 4 ++- content/zh/docs/Developerguide/mysql_fdw.md | 2 +- content/zh/docs/Developerguide/oracle_fdw.md | 2 +- .../zh/docs/Developerguide/postgres_fdw.md | 28 ++++++++++++++++ 10 files changed, 140 insertions(+), 4 deletions(-) create mode 100644 content/zh/docs/Developerguide/postgres_fdw.md diff --git a/content/zh/docs/Developerguide/ALTER-FOREIGN-TABLE.md b/content/zh/docs/Developerguide/ALTER-FOREIGN-TABLE.md index e9375f348..cc999cc07 100644 --- a/content/zh/docs/Developerguide/ALTER-FOREIGN-TABLE.md +++ b/content/zh/docs/Developerguide/ALTER-FOREIGN-TABLE.md @@ -43,6 +43,19 @@ MySQL侧的表名。 + postgres_fdw支持的options包括: + + - **schema_name** + + 远端server的schema名称。如果不指定的话,将使用外表自身的schema名称作为远端的schema名称。 + + - **table_name** + + 远端server的表名。如果不指定的话,将使用外表自身的表名作为远端的表名。 + + - **column_name** + + 远端server的表的列名。如果不指定的话,将使用外表自身的列名作为远端的的表的列名。 - **value** diff --git a/content/zh/docs/Developerguide/ALTER-SERVER.md b/content/zh/docs/Developerguide/ALTER-SERVER.md index ab7449351..1ddd9f2d2 100644 --- a/content/zh/docs/Developerguide/ALTER-SERVER.md +++ b/content/zh/docs/Developerguide/ALTER-SERVER.md @@ -62,6 +62,35 @@ ALTER SERVER server_name - **port** (默认值为 `3306`) MySQL Server/MariaDB监听的端口号。 + + + postgres_fdw支持的options同libpq支持的连接参数一致,可参考 **[链接字符](链接字符.md)** 。需要注意的是,以下几个options不支持修改: + + - **user** 和 **password** + + 用户名和密码将在创建user mapping时指定 + + - **client_encoding** + + 将自动获取本地server的编码方式并设置该值 + + - **application_name** + + 总是设置成`postgres_fdw` + + 除了libpq支持的连接参数外,还额外提供3个options: + + - **use_remote_estimate** + + 控制`postgres_fdw`是否发出`EXPLAIN`命令以获取运行消耗估算。默认值为`false`。 + + - **fdw_startup_cost** + + 执行一个外表扫描时的启动耗时估算。这个值通常包含建立连接、远端对请求的分析和生成计划的耗时。默认值为`100`。 + + - **fdw_typle_cost** + + 在远端服务器上对每一个元组进行扫描时的额外消耗。这个值通常表示数据在server间传输的额外消耗。默认值为`0.01`。 - **new\_name** diff --git a/content/zh/docs/Developerguide/ALTER-USER-MAPPING.md b/content/zh/docs/Developerguide/ALTER-USER-MAPPING.md index bad530455..d1923b8b8 100644 --- a/content/zh/docs/Developerguide/ALTER-USER-MAPPING.md +++ b/content/zh/docs/Developerguide/ALTER-USER-MAPPING.md @@ -48,6 +48,16 @@ ALTER USER MAPPING FOR { user_name | USER | CURRENT_USER | PUBLIC } MySQL Server/MariaDB用户对应的密码。 + postgres_fdw支持的options包括: + + - **user** + + 远端openGauss的用户名。 + + - **password** + + 远端openGauss用户对应的密码。 + ## 相关链接 diff --git a/content/zh/docs/Developerguide/CREATE-FOREIGN-TABLE.md b/content/zh/docs/Developerguide/CREATE-FOREIGN-TABLE.md index 3d53d62cb..860d2e4c3 100644 --- a/content/zh/docs/Developerguide/CREATE-FOREIGN-TABLE.md +++ b/content/zh/docs/Developerguide/CREATE-FOREIGN-TABLE.md @@ -69,6 +69,20 @@ CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [ MySQL侧的表名。 + postgres_fdw支持的options包括: + + - **schema_name** + + 远端server的schema名称。如果不指定的话,将使用外表自身的schema名称作为远端的schema名称。 + + - **table_name** + + 远端server的表名。如果不指定的话,将使用外表自身的表名作为远端的表名。 + + - **column_name** + + 远端server的表的列名。如果不指定的话,将使用外表自身的列名作为远端的的表的列名。 + ## 相关链接 [ALTER FOREIGN TABLE](ALTER-FOREIGN-TABLE.md),[DROP FOREIGN TABLE](DROP-FOREIGN-TABLE.md) diff --git a/content/zh/docs/Developerguide/CREATE-SERVER.md b/content/zh/docs/Developerguide/CREATE-SERVER.md index c1b694492..984d839fb 100644 --- a/content/zh/docs/Developerguide/CREATE-SERVER.md +++ b/content/zh/docs/Developerguide/CREATE-SERVER.md @@ -20,7 +20,7 @@ CREATE SERVER server_name 指定外部数据封装器的名称。 - 取值范围:oracle_fdw,mysql_fdw,mot_fdw。 + 取值范围:oracle_fdw,mysql_fdw,postgres_fdw,mot_fdw。 - **OPTIONS \( \{ option\_name ' value ' \} \[, ...\] \)** @@ -47,6 +47,36 @@ CREATE SERVER server_name - **port** (默认值为 `3306`) MySQL Server/MariaDB监听的端口号。 + + + postgres_fdw支持的options同libpq支持的连接参数一致,可参考 **[链接字符](链接字符.md)** 。需要注意的是,以下几个options不支持设置: + + - **user** 和 **password** + + 用户名和密码将在创建user mapping时指定 + + - **client_encoding** + + 将自动获取本地server的编码方式并设置该值 + + - **application_name** + + 总是设置成`postgres_fdw` + + 除了libpq支持的连接参数外,还额外提供3个options: + + - **use_remote_estimate** + + 控制`postgres_fdw`是否发出`EXPLAIN`命令以获取运行消耗估算。默认值为`false`。 + + - **fdw_startup_cost** + + 执行一个外表扫描时的启动耗时估算。这个值通常包含建立连接、远端对请求的分析和生成计划的耗时。默认值为`100`。 + + - **fdw_typle_cost** + + 在远端服务器上对每一个元组进行扫描时的额外消耗。这个值通常表示数据在server间传输的额外消耗。默认值为`0.01`。 + 相关链接 diff --git a/content/zh/docs/Developerguide/CREATE-USER-MAPPING.md b/content/zh/docs/Developerguide/CREATE-USER-MAPPING.md index 0a99f9b04..5605d6cd9 100644 --- a/content/zh/docs/Developerguide/CREATE-USER-MAPPING.md +++ b/content/zh/docs/Developerguide/CREATE-USER-MAPPING.md @@ -41,6 +41,16 @@ CREATE USER MAPPING FOR { user_name | USER | CURRENT_USER | PUBLIC } - **password** MySQL Server/MariaDB用户对应的密码。 + + postgres_fdw支持的options包括: + + - **user** + + 远端openGauss的用户名。 + + - **password** + + 远端openGauss用户对应的密码。 相关链接 diff --git a/content/zh/docs/Developerguide/Foreign-Data-Wrapper.md b/content/zh/docs/Developerguide/Foreign-Data-Wrapper.md index 581a830bd..a3e60d662 100644 --- a/content/zh/docs/Developerguide/Foreign-Data-Wrapper.md +++ b/content/zh/docs/Developerguide/Foreign-Data-Wrapper.md @@ -1,8 +1,10 @@ # Foreign Data Wrapper -openGauss的fdw实现的功能是各个openGauss数据库及远程数据库之间的跨库操作。目前支持的远程数据库类型包括Oracle、Mysql(MariaDB)。 +openGauss的fdw实现的功能是各个openGauss数据库及远程数据库之间的跨库操作。目前支持的远程数据库类型包括Oracle、Mysql(MariaDB)、openGauss(postgres_fdw)。 - **[oracle_fdw](oracle_fdw.md)** - **[mysql_fdw](mysql_fdw.md)** +- **[postgres_fdw](postgres_fdw.md)** + diff --git a/content/zh/docs/Developerguide/mysql_fdw.md b/content/zh/docs/Developerguide/mysql_fdw.md index d50756c53..4acf82084 100644 --- a/content/zh/docs/Developerguide/mysql_fdw.md +++ b/content/zh/docs/Developerguide/mysql_fdw.md @@ -15,7 +15,7 @@ mysql_fdw是一款开源插件,github地址: https://github.com/EnterpriseDB 如果编译安装时,没有加入 **--enable-mysql-fdw** 选项,可以在openGauss安装完成后,再次编译mysql_fdw,然后手动将编译产物 **mysql_fdw.so** 放到对应的安装目录 **lib/postgresql/** ,将 **mysql_fdw--1.0--1.1.sql,mysql_fdw--1.1.sql,mysql_fdw--1.0.sql,mysql_fdw.control** 放到对应的安装目录 **share/postgresql/extension/** 即可。 ## 使用mysql_fdw -使用mysql_fdw需要连接MariaDB或者MySQL Server,MariaDB或MySQL Server请自行安装。 +- 使用mysql_fdw需要连接MariaDB或者MySQL Server,MariaDB或MySQL Server请自行安装。 - 加载mysql_fdw扩展:**CREATE EXTENSION mysql_fdw;** - 创建服务器对象:**[CREATE SEVER](CREATE-SERVER.md)** - 创建用户映射:**[CREATE USER MAPPING](CREATE-USER-MAPPING.md)** diff --git a/content/zh/docs/Developerguide/oracle_fdw.md b/content/zh/docs/Developerguide/oracle_fdw.md index 55cdbb15d..2693d839e 100644 --- a/content/zh/docs/Developerguide/oracle_fdw.md +++ b/content/zh/docs/Developerguide/oracle_fdw.md @@ -15,7 +15,7 @@ oracle_fdw是一款开源插件,github地址: https://github.com/laurenz/ora 如果编译安装时,没有加入 **--enable-oracle-fdw** 选项,可以在openGauss安装完成后,再次编译oracle_fdw,然后手动将编译产物 **oracle_fdw.so** 放到对应的安装目录 **lib/postgresql/** ,将 **oracle_fdw--1.0--1.1.sql,oracle_fdw--1.1.sql,oracle_fdw.control** 放到对应的安装目录 **share/postgresql/extension/** 即可。 ## 使用oracle_fdw -使用oracle_fdw需要连接Oracle,Oracle server请自行安装。 +- 使用oracle_fdw需要连接Oracle,Oracle server请自行安装。 - 加载oracle_fdw扩展:**CREATE EXTENSION oracle_fdw;** - 创建服务器对象:**[CREATE SEVER](CREATE-SERVER.md)** - 创建用户映射:**[CREATE USER MAPPING](CREATE-USER-MAPPING.md)** diff --git a/content/zh/docs/Developerguide/postgres_fdw.md b/content/zh/docs/Developerguide/postgres_fdw.md new file mode 100644 index 000000000..1b46b76d8 --- /dev/null +++ b/content/zh/docs/Developerguide/postgres_fdw.md @@ -0,0 +1,28 @@ +# postgres_fdw +postgres_fdw是一款开源插件,其代码随PostgreSQL源码一同发布。openGauss基于开源的 PostgreSQL 9.4.26 版本中的postgres_fdw源码(https://ftp.postgresql.org/pub/source/v9.4.26/postgresql-9.4.26.tar.gz )进行开发适配。 + +postgres_fdw插件默认参与编译,使用安装包安装好openGauss后,可直接使用postgres_fdw,无须其他操作。 + +- + >![](public_sys-resources/icon-note.gif) **说明:** + >当前postgres_fdw仅支持openGauss连接openGauss,不支持openGauss连接PostgreSQL。 + +## 使用postgres_fdw +- 加载postgres_fdw扩展:**CREATE EXTENSION postgres_fdw;** +- 创建服务器对象:**[CREATE SEVER](CREATE-SERVER.md)** +- 创建用户映射:**[CREATE USER MAPPING](CREATE-USER-MAPPING.md)** +- 创建外表:**[CREATE FOREIGN TABLE](CREATE-FOREIGN-TABLE.md)** 外表的表结构需要与远端openGauss侧的表结构保持一致。 +- 对外表做正常的操作,如 **[INSERT](INSERT.md)** 、 **[UPDATE](UPDATE.md)** 、 **[DELETE](DELETE.md)** 、 **[SELECT](SELECT.md)** 、 **[EXPLAIN](EXPLAIN.md)** 、 **[ANALYZE](ANALYZE-ANALYSE.md)** 、 **[COPY](COPY.md)** 等。 +- 删除外表:**[DROP FOREIGN TABLE](DROP-FOREIGN-TABLE.md)** +- 删除用户映射:**[DROP USER MAPPING](DROP-USER-MAPPING.md)** +- 删除服务器对象:**[DROP SERVER](DROP-SERVER.md)** +- 删除扩展:**DROP EXTENSION postgres_fdw;** + +## 常见问题 +- 在openGauss上建立外表时,不会同步在远端的openGauss上建表,需要自己利用客户端连接远端openGauss建表。 +- 执行**CREATE USER MAPPING**时使用的openGauss用户需要有远程连接openGauss及对表相关操作的权限。使用外表前,可以在本地机器上,使用gsql的客户端,使用对应的用户名密码确认能否成功连接远端openGauss并进行操作。 + +## 已知问题 +- 两个postgres_fdw外表间的**SELECT JOIN**不支持下推到远端openGauss执行,会被分成两条SQL语句传递到远端openGauss执行,然后在本地汇总处理结果。 +- 不支持**IMPORT FOREIGN SCHEMA**语法。 +- 不支持对外表进行**CREATE TRIGGER**操作。 \ No newline at end of file -- Gitee