diff --git a/content/zh/docs/Developerguide/ALTER-FOREIGN-TABLE.md b/content/zh/docs/Developerguide/ALTER-FOREIGN-TABLE.md new file mode 100644 index 0000000000000000000000000000000000000000..e9375f348511a8e6375b84067d38f0c90918de74 --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER-FOREIGN-TABLE.md @@ -0,0 +1,54 @@ +# ALTER FOREIGN TABLE + +## 功能描述 + +用于对外表进行修改。 + +## 语法格式 + + ``` + ALTER FOREIGN TABLE [ IF EXISTS ] table_name + OPTIONS ( {[ ADD | SET | DROP ] option ['value']}[, ... ]); + ``` + +## 参数说明 + +- **table\_name** + + 需要修改的外表名称。 + + 取值范围:已存在的外表名。 + +- **option** + + 改变外部表或者外部表字段的选项。`ADD`, `SET`, 和`DROP`指定执行的操作。 如果没有显式设置操作,那么默认就是`ADD`。选项的名字不允许重复(尽管表选项和表字段选项可以有相同的名字)。 选项的名称和值也会通过外部数据封装器的类库库进行校验。 + + oracle_fdw支持的options包括: + + - **table** + + oracle server侧的表名。需要同oracle系统表中记录的表名完全一致,通常是由大写字符组成。 + + - **schema** + + 表所对应的schema(或owner)。需要同oracle系统表中记录的表名完全一致,通常是由大写字符组成。 + + mysql_fdw支持的options包括: + + - **dbname** + + MySQL的database名称。 + + - **table_name** + + MySQL侧的表名。 + + +- **value** + + option的新值。 + + +## 相关链接 + +[CREATE FOREIGN TABLE](CREATE-FOREIGN-TABLE.md),[DROP FOREIGN TABLE](DROP-FOREIGN-TABLE.md) \ No newline at end of file diff --git a/content/zh/docs/Developerguide/ALTER-SERVER.md b/content/zh/docs/Developerguide/ALTER-SERVER.md new file mode 100644 index 0000000000000000000000000000000000000000..ab7449351a69379b46ce8d2ec24ec3d6f632ea79 --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER-SERVER.md @@ -0,0 +1,75 @@ +# ALTER SERVER + +## 功能描述 + +增加、修改和删除一个现有server的参数。现有server可以从pg\_foreign\_server系统表查询。 + +## 注意事项 + +除系统管理员外,只有server的owner才可以进行Alter操作。 + +## 语法格式 + +- 修改外部服务的参数。 + +``` +ALTER SERVER server_name [ VERSION 'new_version' ] + [ OPTIONS ( {[ ADD | SET | DROP ] option ['value']} [, ... ] ) ]; +``` + +在OPTIONS选项里,`ADD`、`SET`和`DROP`指定要执行的操作,未指定时默认为`ADD`操作。option和value为对应操作的参数。 + +- 修改外部服务的名称。 + +``` +ALTER SERVER server_name + RENAME TO new_name; +``` + +## 参数说明 + +修改server的参数如下所示: + +- **server\_name** + + 所修改的server的名称。 + +- **new\_version** + + 修改后server的新版本名称。 + +- 修改server所支持的**OPTIONS**如下所示: + 更改该服务器的选项。`ADD`、`SET`和 `DROP`指定要执行的动作。如果没有显式地指定操作, 将会假定为`ADD`。选项名称必须唯一,名称和值也会使用该服务器的外部数据包装器库进行验证。 + + oracle_fdw支持的options包括: + + - **dbserver** + + 远端oracle数据库的连接字符串。 + + - **isolation_level** (默认值为`serializable`) + + oracle数据库的事务隔离级别。 + + 取值范围:`serializable`, `read_committed` , `read_only` + + mysql_fdw支持的options包括: + + - **host** (默认值为 `127.0.0.1`) + + MySQL Server/MariaDB的地址。 + + - **port** (默认值为 `3306`) + + MySQL Server/MariaDB监听的端口号。 + + +- **new\_name** + + 修改后server的新名称。 + + +## 相关链接 + +[CREATE SERVER](CREATE-SERVER.md) [DROP SERVER](DROP-SERVER.md) + diff --git a/content/zh/docs/Developerguide/ALTER-USER-MAPPING.md b/content/zh/docs/Developerguide/ALTER-USER-MAPPING.md new file mode 100644 index 0000000000000000000000000000000000000000..bad5304559c0e79119801aa62b3643b44089cfa2 --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER-USER-MAPPING.md @@ -0,0 +1,55 @@ +# ALTER USER MAPPING + +## 功能描述 + +更改一个用户映射的定义。 + + +## 语法格式 + +``` +ALTER USER MAPPING FOR { user_name | USER | CURRENT_USER | PUBLIC } + SERVER server_name + OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ] ) +``` + +在OPTIONS选项里,`ADD`、`SET`和`DROP`指定要执行的操作,未指定时默认为`ADD`操作。option和value为对应操作的参数。 + +## 参数说明 + +- **user\_name** + + 该映射的用户名。`CURRENT_USER`和`USER`匹配当前 用户的名称。`PUBLIC`被用来匹配系统中所有当前以及未来的用户名。 + +- **server\_name** + + 该用户映射的服务器名。 + +- 修改server所支持的**OPTIONS**如下所示: + 为该用户映射更改选项。新选项会覆盖任何之前指定的选项。`ADD`、 `SET`和`DROP`指定要被执行的动作。如果没有显式地指定操作,将假定为`ADD`。选项名称必须为唯一,该服务器的外部数据包装器也会验证选项。 + + oracle_fdw支持的options包括: + + - **user** + + oracle server的用户名。 + + - **password** + + oracle用户对应的密码。 + + mysql_fdw支持的options包括: + + - **username** + + MySQL Server/MariaDB的用户名。 + + - **password** + + MySQL Server/MariaDB用户对应的密码。 + + +## 相关链接 + +[CREATE USER MAPPING](CREATE-USER-MAPPING.md) [DROP USER MAPPING](DROP-USER-MAPPING.md) + diff --git a/content/zh/docs/Developerguide/CREATE-FOREIGN-TABLE.md b/content/zh/docs/Developerguide/CREATE-FOREIGN-TABLE.md new file mode 100644 index 0000000000000000000000000000000000000000..3d53d62cba8b89e822de9b054b8006c44cccb603 --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE-FOREIGN-TABLE.md @@ -0,0 +1,74 @@ +# CREATE FOREIGN TABLE + +创建外表。 + +## 语法格式 + +``` +CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [ + column_name type_name [ OPTIONS ( option 'value' [, ... ] ) ] [ COLLATE collation ] [ column_constraint [ ... ] ] + [, ... ] +] ) + SERVER server_name +[ OPTIONS ( option 'value' [, ... ] ) ] + +这里column_constraint 可以是: +[ CONSTRAINT constraint_name ] +{ NOT NULL | + NULL | + DEFAULT default_expr } +``` + +## 参数说明 + +- **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侧的表名。 + +## 相关链接 + +[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 new file mode 100644 index 0000000000000000000000000000000000000000..c1b694492b0a6c7891773d7b21a79f88e8561934 --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE-SERVER.md @@ -0,0 +1,54 @@ +# CREATE SERVER +## 功能描述 +定义一个新的外部服务器。 +## 语法格式 +``` +CREATE SERVER server_name + FOREIGN DATA WRAPPER fdw_name + OPTIONS ( { option_name ' value ' } [, ...] ) ; +``` + +## 参数说明 + +- **server\_name** + + server的名称。 + + 取值范围:长度必须小于等于63。 + +- **fdw\_name** + + 指定外部数据封装器的名称。 + + 取值范围:oracle_fdw,mysql_fdw,mot_fdw。 + +- **OPTIONS \( \{ option\_name ' value ' \} \[, ...\] \)** + + 这个子句为服务器指定选项。这些选项通常定义该服务器的连接细节, 但是实际的名称和值取决于该服务器的外部数据包装器。 + + oracle_fdw支持的options包括: + + - **dbserver** + + 远端Oracle数据库的连接字符串。 + + - **isolation_level** (默认值为`serializable`) + + oracle数据库的事务隔离级别。 + + 取值范围:`serializable`, `read_committed` , `read_only` + + mysql_fdw支持的options包括: + + - **host** (默认值为 `127.0.0.1`) + + MySQL Server/MariaDB的地址。 + + - **port** (默认值为 `3306`) + + MySQL Server/MariaDB监听的端口号。 + +相关链接 + +[ALTER SERVER](ALTER-SERVER.md), [DROP SERVER](DROP-SERVER.md) + diff --git a/content/zh/docs/Developerguide/CREATE-USER-MAPPING.md b/content/zh/docs/Developerguide/CREATE-USER-MAPPING.md new file mode 100644 index 0000000000000000000000000000000000000000..0a99f9b045595357c4249f8c08ef34605744adf2 --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE-USER-MAPPING.md @@ -0,0 +1,48 @@ +# CREATE USER MAPPING +## 功能描述 +定义一个用户到一个外部服务器的新映射。 +## 语法格式 +``` +CREATE USER MAPPING FOR { user_name | USER | CURRENT_USER | PUBLIC } + SERVER server_name + [ OPTIONS ( option 'value' [ , ... ] ) ] +``` + +## 参数说明 + +- **user\_name** + + 要映射到外部服务器的一个现有用户的名称。 `CURRENT_USER`和`USER`匹配当前用户的名称。 当`PUBLIC`被指定时,一个所谓的公共映射会被创建,当没有特定用户的映射可用时将会使用它。 + +- **server\_name** + + 将为其创建用户映射的现有服务器的名称。 + +- **OPTIONS \( \{ option\_name ' value ' \} \[, ...\] \)** + + 这个子句指定用户映射的选项。这些选项通常定义该映射实际的用户名和口令。选项名必须唯一。允许的选项名和值与该服务器的外部数据包装器有关。 + + oracle_fdw支持的options包括: + + - **user** + + oracle server的用户名。 + + - **password** + + oracle用户对应的密码。 + + mysql_fdw支持的options包括: + + - **username** + + MySQL Server/MariaDB的用户名。 + + - **password** + + MySQL Server/MariaDB用户对应的密码。 + +相关链接 + +[ALTER USER MAPPING](ALTER-USER-MAPPING.md), [DROP USER MAPPING](DROP-USER-MAPPING.md) + diff --git a/content/zh/docs/Developerguide/DROP-FOREIGN-TABLE.md b/content/zh/docs/Developerguide/DROP-FOREIGN-TABLE.md new file mode 100644 index 0000000000000000000000000000000000000000..d3bbf5f22a554b4071ae2a3b28be25686b9e47dd --- /dev/null +++ b/content/zh/docs/Developerguide/DROP-FOREIGN-TABLE.md @@ -0,0 +1,37 @@ +# DROP FOREIGN TABLE + +## 功能描述 + +删除指定的外表。 + +## 注意事项 + +DROP FOREIGN TABLE会强制删除指定的表,删除表后,依赖该表的索引会被删除,而使用到该表的函数和存储过程将无法执行。 + +## 语法格式 + +``` +DROP FOREIGN TABLE [ IF EXISTS ] + table_name [, ...] [ CASCADE | RESTRICT ]; +``` + +## 参数说明 + +- **IF EXISTS** + + 如果指定的表不存在,则发出一个notice而不是抛出一个错误。 + +- **table\_name** + + 表名称。 + + 取值范围:已存在的表名。 + +- **CASCADE | RESTRICT** + - CASCADE:级联删除依赖于表的对象(比如视图)。 + - RESTRICT:如果存在依赖对象,则拒绝删除该表。这个是缺省。 + +## 相关链接 + +[ALTER FOREIGN TABLE](ALTER-FOREIGN-TABLE.md),[CREATE FOREIGN TABLE](CREATE-FOREIGN-TABLE.md) + diff --git a/content/zh/docs/Developerguide/DROP-SERVER.md b/content/zh/docs/Developerguide/DROP-SERVER.md new file mode 100644 index 0000000000000000000000000000000000000000..fa9f396c1d23e6ab71d19c7e15a36d43d598e1e5 --- /dev/null +++ b/content/zh/docs/Developerguide/DROP-SERVER.md @@ -0,0 +1,35 @@ +# DROP SERVER + +## 功能描述 + +删除现有的一个数据服务器。 + +## 注意事项 + +只有server的owner才可以删除。 + +## 语法格式 + +``` +DROP SERVER [ IF EXISTS ] server_name [ {CASCADE | RESTRICT} ] ; +``` + +## 参数描述 + +- **IF EXISTS** + + 如果指定的数据服务器不存在,则发出一个notice而不是抛出一个错误。 + +- **server\_name** + + 服务器名称。 + +- **CASCADE | RESTRICT** + - CASCADE:级联删除依赖于server的对象 。 + - RESTRICT(缺省值):如果存在依赖对象,则拒绝删除该server。 + + +## 相关链接 + +[ALTER SERVER](ALTER-SERVER.md),[CREATE SERVER](CREATE-SERVER.md) + diff --git a/content/zh/docs/Developerguide/DROP-USER-MAPPING.md b/content/zh/docs/Developerguide/DROP-USER-MAPPING.md new file mode 100644 index 0000000000000000000000000000000000000000..9609964c98e2265bdfc576f30b7630bdc637ea91 --- /dev/null +++ b/content/zh/docs/Developerguide/DROP-USER-MAPPING.md @@ -0,0 +1,30 @@ +# DROP USER MAPPING + +## 功能描述 + +移除一个用于外部服务器的用户映射。 + +## 语法格式 + +``` +DROP USER MAPPING [ IF EXISTS ] FOR { user_name | USER | CURRENT_USER | PUBLIC } SERVER server_name +``` + +## 参数描述 + +- **IF EXISTS** + + 如果该用户映射不存在则不要抛出一个错误,而是发出一个提示。 + +- **user\_name** + + 该映射的用户名。`CURRENT_USER`和`USER`匹配当前用户的名称。`PUBLIC`被用来匹配系统中所有现存和未来的用户名。 + +- **server\_name** + 用户映射的服务器名。 + + +## 相关链接 + +[CREATE USER MAPPING](CREATE-USER-MAPPING.md),[ALTER USER MAPPING](ALTER-USER-MAPPING.md) + diff --git a/content/zh/docs/Developerguide/Foreign-Data-Wrapper.md b/content/zh/docs/Developerguide/Foreign-Data-Wrapper.md new file mode 100644 index 0000000000000000000000000000000000000000..581a830bd68540f82b19f16277399eca7d24b9fb --- /dev/null +++ b/content/zh/docs/Developerguide/Foreign-Data-Wrapper.md @@ -0,0 +1,8 @@ +# Foreign Data Wrapper +openGauss的fdw实现的功能是各个openGauss数据库及远程数据库之间的跨库操作。目前支持的远程数据库类型包括Oracle、Mysql(MariaDB)。 + +- **[oracle_fdw](oracle_fdw.md)** + +- **[mysql_fdw](mysql_fdw.md)** + + diff --git a/content/zh/docs/Developerguide/mysql_fdw.md b/content/zh/docs/Developerguide/mysql_fdw.md new file mode 100644 index 0000000000000000000000000000000000000000..d50756c53c70b321d81bed107f57ede91b3c79e7 --- /dev/null +++ b/content/zh/docs/Developerguide/mysql_fdw.md @@ -0,0 +1,35 @@ +# mysql_fdw +mysql_fdw是一款开源插件,github地址: https://github.com/EnterpriseDB/mysql_fdw 。openGauss基于开源的 mysql_fdw Release 2.5.3 版本(https://github.com/EnterpriseDB/mysql_fdw/archive/REL-2_5_3.tar.gz )进行开发适配。 + +编译和使用mysql_fdw需要环境上包含MariaDB的开发包,所以openGauss默认不编译mysql_fdw,下面依次介绍如何编译和使用mysql_fdw。 + +## 编译mysql_fdw +编译mysql_fdw需要安装MariaDB的开发库和头文件,推荐使用MariaDB的官方源进行安装,源选择参考: http://downloads.mariadb.org/mariadb/repositories/ + +配置好源后,使用 **yum install MariaDB-devel MariaDB-shared** 安装相关开发库。另外**MariaDB-client**是MariaDB的客户端工具,也可以根据需要安装,用于连接MariaDB进行测试。 + +安装好开发包后,就可以开始编译mysql_fdw了。编译时需要在执行**configure**时,加入 **--enable-mysql-fdw** 选项。后续按照正常的openGauss编译方式编译即可。(openGauss的编译参考 **[软件安装编译](../Compilationguide/软件安装编译.md)** ) + +编译完成后,编译产物为 **mysql_fdw.so** ,位于安装目录的 **lib/postgresql/** 下。mysql_fdw相关的sql文件和control文件,位于安装目录的 **share/postgresql/extension/** 下。 + +如果编译安装时,没有加入 **--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扩展:**CREATE EXTENSION mysql_fdw;** +- 创建服务器对象:**[CREATE SEVER](CREATE-SERVER.md)** +- 创建用户映射:**[CREATE USER MAPPING](CREATE-USER-MAPPING.md)** +- 创建外表:**[CREATE FOREIGN TABLE](CREATE-FOREIGN-TABLE.md)** 外表的表结构需要与MySQL/MariaDB侧的表结构保持一致。注意MySQL/MariaDB侧的表的第一个字段必须具有唯一性约束(如PRIMARY KEY、UNIQUE等)。 +- 对外表做正常的操作,如 **[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 mysql_fdw;** +## 常见问题 +- 在openGauss上建立外表时,不会同步在MariaDB/MySQL Server上建表,需要自己利用MariaDB/MySQL Server的客户端连接MariaDB/MySQL Server建表。 +- 创建USER MAPPING时使用的MariaDB/MySQL Server用户需要有远程连接MariaDB/MySQL Server及对表相关操作的权限。使用外表前,可以在openGauss server所在的机器上,使用MariaDB/MySQL Server的客户端,使用对应的用户名密码确认能否成功连接MariaDB/MySQL Server并进行操作。 +- 对外表执行DML操作时,出现 **Can't initialize character set SQL_ASCII (path: compiled_in)** 错误。由于MariaDB不支持**SQL_ASCII**编码格式,目前只能通过修改openGauss database的编码格式解决该问题。修改database编码格式的方式为 **update pg_database set encoding = pg_char_to_encoding('UTF-8') where datname = 'postgres';** datname根据实际情况填写。注意修改完编码格式后,需要重新开启一个gsql会话,才能使mysql_fdw使用更新后的参数。也可以通过在执行 **gs_initdb** 时,使用 **--locale=LOCALE** ,指定默认的编码格式为 **非SQL_ASCII** 编码。 +## 已知问题 +- 两个mysql外表间的**SELECT JOIN**不支持下推到MariaDB/MySQL Server执行,会被分成两条SQL语句传递到MariaDB/MySQL Server执行,然后在openGauss处汇总处理结果。 +- 不支持**IMPORT FOREIGN SCHEMA**语法。 +- 不支持对外表进行**CREATE TRIGGER**操作。 diff --git a/content/zh/docs/Developerguide/oracle_fdw.md b/content/zh/docs/Developerguide/oracle_fdw.md new file mode 100644 index 0000000000000000000000000000000000000000..55cdbb15d6a589d43fc2b9bf16e06abd4b7f31fc --- /dev/null +++ b/content/zh/docs/Developerguide/oracle_fdw.md @@ -0,0 +1,36 @@ +# oracle_fdw +oracle_fdw是一款开源插件,github地址: https://github.com/laurenz/oracle_fdw 。openGauss基于开源的 oracle_fdw Release 2.2.0 版本(https://github.com/laurenz/oracle_fdw/archive/ORACLE_FDW_2_2_0.tar.gz )进行开发适配。 + +编译和使用oracle_fdw需要环境上包含Oracle的开发包,所以openGauss默认不编译oracle_fdw,下面依次介绍如何编译和使用oracle_fdw。 + +## 编译oracle_fdw +编译oracle_fdw需要安装Oracle的开发库和头文件,相关文件可以在Oracle的官方网站上下载: https://www.oracle.com/database/technologies/instant-client/downloads.html + +选择合适的运行环境和版本,下载**Basic Package**和**SDK Package**并安装。另外**SQLPlus Package**是Oracle的客户端工具,也可以根据需要安装,用于连接Oracle Server进行测试。 + +安装好开发包后,就可以开始编译oracle_fdw了。编译时需要在执行**configure**时,加入 **--enable-oracle-fdw** 选项。后续按照正常的openGauss编译方式编译即可。(openGauss的编译参考 **[软件安装编译](../Compilationguide/软件安装编译.md)** ) + +编译完成后,编译产物为 **oracle_fdw.so**,位于安装目录的 **lib/postgresql/** 下。oracle_fdw相关的sql文件和control文件,位于安装目录的 **share/postgresql/extension/** 下。 + +如果编译安装时,没有加入 **--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扩展:**CREATE EXTENSION oracle_fdw;** +- 创建服务器对象:**[CREATE SEVER](CREATE-SERVER.md)** +- 创建用户映射:**[CREATE USER MAPPING](CREATE-USER-MAPPING.md)** +- 创建外表:**[CREATE FOREIGN TABLE](CREATE-FOREIGN-TABLE.md)** 外表的表结构需要与Oracle侧的表结构保持一致。注意Oracle server侧的表的第一个字段必须具有唯一性约束(如PRIMARY KEY、UNIQUE等)。 +- 对外表做正常的操作,如 **[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 oracle_fdw;** +## 常见问题 +- 在openGauss上建立外表时,不会同步在Oracle上建表,需要自己利用Oracle的客户端连接Oracle建表。 +- 执行**CREATE USER MAPPING**时使用的Oracle用户需要有远程连接Oracle及对表相关操作的权限。使用外表前,可以在openGauss server所在的机器上,使用Oracle的客户端,使用对应的用户名密码确认能否成功连接Oracle并进行操作。 +- 执行 **CREATE EXTENSION oracle_fdw;** 时,出现 **libclntsh.so: cannot open shared object file: No such file or directory** 。原因是Oracle的开发库libclntsh.so不在系统的相关路径中,可以先找到libclntsh.so的具体路径,然后将该so文件所在的文件夹加到 **/etc/ld.so.conf** 中。比如libclntsh.so的路径为 **/usr/lib/oracle/11.2/client64/lib/libclntsh.so.11.1** ,那么就将该文件的路径 **/usr/lib/oracle/11.2/client64/lib/** 加到 **/etc/ld.so.conf** 文件末尾。然后执行 **ldconfig** 使修改生效即可。注意此操作需要 **root** 权限。 + +## 已知问题 +- 两个oracle外表间的**SELECT JOIN**不支持下推到Oracle server执行,会被分成两条SQL语句传递到Oracle执行,然后在openGauss处汇总处理结果。 +- 不支持**IMPORT FOREIGN SCHEMA**语法。 +- 不支持对外表进行**CREATE TRIGGER**操作。 \ No newline at end of file diff --git a/content/zh/menu/index.md b/content/zh/menu/index.md index d6b1c47069657393c14a370ded84cc3072cf9c87..c6cdfa3c9602dbf1bc9bded693f0214c76c581d1 100644 --- a/content/zh/menu/index.md +++ b/content/zh/menu/index.md @@ -723,6 +723,7 @@ headless: true - [ALTER DATA SOURCE]({{< relref "./docs/Developerguide/ALTER-DATA-SOURCE.md" >}}) - [ALTER DEFAULT PRIVILEGES]({{< relref "./docs/Developerguide/ALTER-DEFAULT-PRIVILEGES.md" >}}) - [ALTER DIRECTORY]({{< relref "./docs/Developerguide/ALTER-DIRECTORY.md" >}}) + - [ALTER FOREIGN TABLE]({{< relref "./docs/Developerguide/ALTER-FOREIGN-TABLE.md" >}}) - [ALTER FUNCTION]({{< relref "./docs/Developerguide/ALTER-FUNCTION.md" >}}) - [ALTER GROUP]({{< relref "./docs/Developerguide/ALTER-GROUP.md" >}}) - [ALTER INDEX]({{< relref "./docs/Developerguide/ALTER-INDEX.md" >}}) @@ -731,6 +732,7 @@ headless: true - [ALTER ROW LEVEL SECURITY POLICY]({{< relref "./docs/Developerguide/ALTER-ROW-LEVEL-SECURITY-POLICY.md" >}}) - [ALTER SCHEMA]({{< relref "./docs/Developerguide/ALTER-SCHEMA.md" >}}) - [ALTER SEQUENCE]({{< relref "./docs/Developerguide/ALTER-SEQUENCE.md" >}}) + - [ALTER SERVER]({{< relref "./docs/Developerguide/ALTER-SERVER.md" >}}) - [ALTER SESSION]({{< relref "./docs/Developerguide/ALTER-SESSION.md" >}}) - [ALTER SYNONYM]({{< relref "./docs/Developerguide/ALTER-SYNONYM.md" >}}) - [ALTER SYSTEM KILL SESSION]({{< relref "./docs/Developerguide/ALTER-SYSTEM-KILL-SESSION.md" >}}) @@ -742,6 +744,7 @@ headless: true - [ALTER TRIGGER]({{< relref "./docs/Developerguide/ALTER-TRIGGER.md" >}}) - [ALTER TYPE]({{< relref "./docs/Developerguide/ALTER-TYPE.md" >}}) - [ALTER USER]({{< relref "./docs/Developerguide/ALTER-USER.md" >}}) + - [ALTER USER MAPPING]({{< relref "./docs/Developerguide/ALTER-USER-MAPPING.md" >}}) - [ALTER VIEW]({{< relref "./docs/Developerguide/ALTER-VIEW.md" >}}) - [ANALYZE | ANALYSE]({{< relref "./docs/Developerguide/ANALYZE-ANALYSE.md" >}}) - [BEGIN]({{< relref "./docs/Developerguide/BEGIN.md" >}}) @@ -756,6 +759,7 @@ headless: true - [CREATE DATABASE]({{< relref "./docs/Developerguide/CREATE-DATABASE.md" >}}) - [CREATE DATA SOURCE]({{< relref "./docs/Developerguide/CREATE-DATA-SOURCE.md" >}}) - [CREATE DIRECTORY]({{< relref "./docs/Developerguide/CREATE-DIRECTORY.md" >}}) + - [CREATE FOREIGN TABLE]({{< relref "./docs/Developerguide/CREATE-FOREIGN-TABLE.md" >}}) - [CREATE FUNCTION]({{< relref "./docs/Developerguide/CREATE-FUNCTION.md" >}}) - [CREATE GROUP]({{< relref "./docs/Developerguide/CREATE-GROUP.md" >}}) - [CREATE INDEX]({{< relref "./docs/Developerguide/CREATE-INDEX.md" >}}) @@ -764,6 +768,7 @@ headless: true - [CREATE ROLE]({{< relref "./docs/Developerguide/CREATE-ROLE.md" >}}) - [CREATE SCHEMA]({{< relref "./docs/Developerguide/CREATE-SCHEMA.md" >}}) - [CREATE SEQUENCE]({{< relref "./docs/Developerguide/CREATE-SEQUENCE.md" >}}) + - [CREATE SERVER}]({{< relref "./docs/Developerguide/CREATE-SERVER.md" >}}) - [CREATE SYNONYM]({{< relref "./docs/Developerguide/CREATE-SYNONYM.md" >}}) - [CREATE TABLE]({{< relref "./docs/Developerguide/CREATE-TABLE.md" >}}) - [CREATE TABLE AS]({{< relref "./docs/Developerguide/CREATE-TABLE-AS.md" >}}) @@ -774,6 +779,7 @@ headless: true - [CREATE TRIGGER]({{< relref "./docs/Developerguide/CREATE-TRIGGER.md" >}}) - [CREATE TYPE]({{< relref "./docs/Developerguide/CREATE-TYPE.md" >}}) - [CREATE USER]({{< relref "./docs/Developerguide/CREATE-USER.md" >}}) + - [CREATE USER MAPPING]({{< relref "./docs/Developerguide/CREATE-USER-MAPPING.md" >}}) - [CREATE VIEW]({{< relref "./docs/Developerguide/CREATE-VIEW.md" >}}) - [CURSOR]({{< relref "./docs/Developerguide/CURSOR.md" >}}) - [DEALLOCATE]({{< relref "./docs/Developerguide/DEALLOCATE.md" >}}) @@ -783,6 +789,7 @@ headless: true - [DROP DATABASE]({{< relref "./docs/Developerguide/DROP-DATABASE.md" >}}) - [DROP DATA SOURCE]({{< relref "./docs/Developerguide/DROP-DATA-SOURCE.md" >}}) - [DROP DIRECTORY]({{< relref "./docs/Developerguide/DROP-DIRECTORY.md" >}}) + - [DROP FOREIGN TABLE]({{< relref "./docs/Developerguide/DROP-FOREIGN-TABLE.md" >}}) - [DROP FUNCTION]({{< relref "./docs/Developerguide/DROP-FUNCTION.md" >}}) - [DROP GROUP]({{< relref "./docs/Developerguide/DROP-GROUP.md" >}}) - [DROP INDEX]({{< relref "./docs/Developerguide/DROP-INDEX.md" >}}) @@ -792,6 +799,7 @@ headless: true - [DROP ROLE]({{< relref "./docs/Developerguide/DROP-ROLE.md" >}}) - [DROP SCHEMA]({{< relref "./docs/Developerguide/DROP-SCHEMA.md" >}}) - [DROP SEQUENCE]({{< relref "./docs/Developerguide/DROP-SEQUENCE.md" >}}) + - [DROP SERVER]({{< relref "./docs/Developerguide/DROP-SERVER.md" >}}) - [DROP SYNONYM]({{< relref "./docs/Developerguide/DROP-SYNONYM.md" >}}) - [DROP TABLE]({{< relref "./docs/Developerguide/DROP-TABLE.md" >}}) - [DROP TABLESPACE]({{< relref "./docs/Developerguide/DROP-TABLESPACE.md" >}}) @@ -800,6 +808,7 @@ headless: true - [DROP TRIGGER]({{< relref "./docs/Developerguide/DROP-TRIGGER.md" >}}) - [DROP TYPE]({{< relref "./docs/Developerguide/DROP-TYPE.md" >}}) - [DROP USER]({{< relref "./docs/Developerguide/DROP-USER.md" >}}) + - [DROP USER MAPPING]({{< relref "./docs/Developerguide/DROP-USER-MAPPING.md" >}}) - [DROP VIEW]({{< relref "./docs/Developerguide/DROP-VIEW.md" >}}) - [EXECUTE]({{< relref "./docs/Developerguide/EXECUTE.md" >}}) - [EXPLAIN]({{< relref "./docs/Developerguide/EXPLAIN.md" >}}) @@ -1237,6 +1246,9 @@ headless: true - [逻辑解码概述]({{< relref "./docs/Developerguide/逻辑解码概述.md" >}}) - [使用SQL函数接口进行逻辑解码]({{< relref "./docs/Developerguide/使用SQL函数接口进行逻辑解码.md" >}}) - [使用逻辑复制工具复制数据]({{< relref "./docs/Developerguide/使用逻辑复制工具复制数据.md" >}}) + - [Foreign Data Wrapper]({{< relref "./docs/Developerguide/Foreign-Data-Wrapper.md" >}}) + - [oracle_fdw]({{< relref "./docs/Developerguide/oracle_fdw.md" >}}) + - [mysql_fdw]({{< relref "./docs/Developerguide/mysql_fdw.md" >}}) - [GUC参数说明]({{< relref "./docs/Developerguide/GUC参数说明.md" >}}) - [GUC使用说明]({{< relref "./docs/Developerguide/GUC使用说明.md" >}}) - [文件位置]({{< relref "./docs/Developerguide/文件位置.md" >}}) @@ -1304,7 +1316,7 @@ headless: true - [GUC参数log\_directory设置不正确引起的core问题]({{< relref "./docs/Developerguide/GUC参数log_directory设置不正确引起的core问题.md" >}}) - [TPCC运行时,注入磁盘满故障,TPCC卡住的问题]({{< relref "./docs/Developerguide/TPCC运行时-注入磁盘满故障-TPCC卡住的问题.md" >}}) - [备机处于need repair\(WAL\)状态问题]({{< relref "./docs/Developerguide/备机处于need-repair(WAL)状态问题.md" >}}) - + - [工具参考]({{< relref "./docs/Toolreference/Toolreference.md" >}}) - [工具一览表]({{< relref "./docs/Toolreference/工具一览表.md" >}}) - [客户端工具]({{< relref "./docs/Toolreference/客户端工具.md" >}})