暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

postgres_fdw插件介绍

roman 2024-04-25
1162

介绍

fdw(foreign data wrapper 外部数据包装器)可以实现磐维数据库及远程服务器之间的跨库操作。

本次介绍postgres_fdw,是一款开源插件,postgres_fdw默认参与编译,登录数据库后通过CREATE EXTENSION postgres_fdw;语句创建插件即可使用。

环境准备

首先自行搭建两套磐维数据库,本次搭建两套磐维2.0集群进行演示,如下:

两套集群互相放通白名单

su - omm

gs_guc reload -N all -I all -h "host all all 192.168.129.0/24 sha256"

详细步骤

1、创建用户:

gsql -r

CREATE USER user_crw IDENTIFIED BY 'Crw@1234';

ALTER USER user_crw sysadmin;

\du+ user_crw

2、创建postgres_fdw扩展

(可对特定数据库创建扩展)

创建并连接至库:

gsql -r

DROP DATABASE database_crw;

CREATE DATABASE database_crw ENCODING = 'UTF8' LC_COLLATE = 'C' LC_CTYPE = 'C';

-- ALTER DATABASE database_crw OWNER TO user_crw;

-- gsql -r -U user_crw -p 17700 -W Crw@1234 -h 192.168.129.41 -d database_crw;

\c database_crw user_crw

CREATE SCHEMA schema_crw;

SET SEARCH_PATH TO schema_crw;

ALTER ROLE user_crw SET search_path TO schema_crw;

SHOW SEARCH_PATH;

创建扩展:

CREATE EXTENSION postgres_fdw; --注意如果没设置SEARCH_PATH则默认是public;

查看扩展:

\dx

\dx+ postgres_fdw

--如果未修改search_path,则为public,后续映射用户建议配置为public。

删除扩展:

DROP EXTENSION postgres_fdw;

3、定义一个新的外部服务器

语法如下:

CREATE SERVER server_name

FOREIGN DATA WRAPPER fdw_name

OPTIONS ( { option_name ' value ' } [, ...] ) ;

fdw_name:指定外部数据封装器的名称,如mysql_fdw,postgres_fdw...

示例:

CREATE SERVER fedlink_to_21 FOREIGN DATA WRAPPER postgres_fdw

OPTIONS (hostaddr '192.168.129.21', port '17700', dbname 'database_crw');

查看已创建的外部服务器:

SELECT * FROM pg_foreign_server;

删除外部服务器:

DROP SERVER IF EXISTS fedlink_to_21;

4、定义一个用户到一个外部服务器的新映射

语法如下:

CREATE USER MAPPING FOR { user_name | USER | CURRENT_USER | PUBLIC }

SERVER server_name

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

示例:

gs_ssh -c "gs_guc generate -S SDF@fsdf23wef -D $GAUSSHOME/bin -o usermapping"

其中-S参数指定default时会随机生成密码,用户也可为-S参数指定密码,此密码用于保证生成密码文件的安全性和唯一性,用户无需保存或记忆,-D指定密码保护文件生成路径。

在$GAUSSHOME/bin目录下自动生成如下2个文件:

登入磐维库并创建用户映射:

gsql -r -U user_crw -p 17700 -W Crw@1234 -h 192.168.129.41 -d database_crw;

CREATE USER MAPPING FOR user_crw SERVER fedlink_to_21 OPTIONS( user 'user_crw',password 'Crw@1234');

查看用户映射:

SELECT * FROM pg_user_mappings;

删除用户映射:

DROP USER MAPPING IF EXISTS FOR user_crw SERVER fedlink_to_21;

5、对端(目标端)创建外表对应的表

--建立外表时,不会同步在对端建表。

gsql -r -U user_crw -p 17700 -W Crw@1234 -h 192.168.129.21 -d database_crw;

CREATE TABLE schema_crw.ftable21_ftable41

(id int,

name varchar(20) NOT NULL);

insert into schema_crw.ftable21_ftable41 values(1,'crw');

select * from schema_crw.ftable21_ftable41;

6、创建外表

CREATE FOREIGN TABLE schema_crw.ftable41_ftable21

(id int,

name varchar(20) NOT NULL) SERVER fedlink_to_21 OPTIONS(schema_name 'schema_crw', table_name 'ftable21_ftable41');

查看外表结构:

\d schema_crw.ftable41_ftable21

查看已创建的外表:

SELECT * FROM pg_foreign_table;

删除外表:

DROP FOREIGN TABLE schema_crw.ftable41_ftable21;

7、能查询到外表数据

SELECT * FROM schema_crw.ftable41_ftable21;


至此就是postgres_fdw扩展的全部介绍。

注意事项

1.两个postgres_fdw外表间的SELECT JOIN不支持下推到远端openGauss执行,会被分成两条SQL语句传递到远端openGauss执行,然后在本地汇总处理结果。

2.不支持IMPORT FOREIGN SCHEMA语法。

3.不支持对外表进行CREATE TRIGGER操作。

参考链接

https://docs-opengauss.osinfra.cn/zh/docs/3.0.0/docs/Developerguide/postgres_fdw.html

https://119.8.102.148/zh/mogdb/v5.0/3-postgres_fdw

文章转载自roman,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论