postgresql插件之mysql_fdw

1.安装mysql和pg数据略过

2.安装mysql_fdw

[root@slt032qws38 dbadmin]# unzip  mysql_fdw-master.zip

[root@slt032qws38 dbadmin]# cd mysql_fdw-master/

[root@slt032qws38 mysql_fdw-master]# export PATH=/data/postgres/bin/:$PATH

[root@slt032qws38 mysql_fdw-master]# export PATH=/usr/local/mysql/bin/:$PATH

[root@slt032qws38 mysql_fdw-master]# make USE_PGXS=1

gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fPIC -I/usr/local/mysql/include -D _MYSQL_LIBNAME=\"libmysqlclient.so\" -I. -I./ -I/data/postgres/include/server -I/data/postgres/include/internal  -D_GNU_SOURCE   -c -o connection.o connection.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fPIC -I/usr/local/mysql/include -D _MYSQL_LIBNAME=\"libmysqlclient.so\" -I. -I./ -I/data/postgres/include/server -I/data/postgres/include/internal  -D_GNU_SOURCE   -c -o option.o option.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fPIC -I/usr/local/mysql/include -D _MYSQL_LIBNAME=\"libmysqlclient.so\" -I. -I./ -I/data/postgres/include/server -I/data/postgres/include/internal  -D_GNU_SOURCE   -c -o deparse.o deparse.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fPIC -I/usr/local/mysql/include -D _MYSQL_LIBNAME=\"libmysqlclient.so\" -I. -I./ -I/data/postgres/include/server -I/data/postgres/include/internal  -D_GNU_SOURCE   -c -o mysql_query.o mysql_query.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fPIC -I/usr/local/mysql/include -D _MYSQL_LIBNAME=\"libmysqlclient.so\" -I. -I./ -I/data/postgres/include/server -I/data/postgres/include/internal  -D_GNU_SOURCE   -c -o mysql_fdw.o mysql_fdw.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fPIC -shared -o mysql_fdw.so connection.o option.o deparse.o mysql_query.o mysql_fdw.o -L/data/postgres/lib    -Wl,--as-needed -Wl,-rpath,'/data/postgres/lib',--enable-new-dtags  

[root@slt032qws38 mysql_fdw-master]# make USE_PGXS=1 install
/bin/mkdir -p '/data/postgres/lib'
/bin/mkdir -p '/data/postgres/share/extension'
/bin/mkdir -p '/data/postgres/share/extension'
/bin/install -c -m 755  mysql_fdw.so '/data/postgres/lib/mysql_fdw.so'
/bin/install -c -m 644 .//mysql_fdw.control '/data/postgres/share/extension/'
/bin/install -c -m 644 .//mysql_fdw--1.0.sql .//mysql_fdw--1.1.sql .//mysql_fdw--1.0--1.1.sql  '/data/postgres/share/extension/'

3.创建插件

mypg=# create extension mysql_fdw ;
ERROR:  failed to load the mysql query: 
libmysqlclient.so: cannot open shared object file: No such file or directory
HINT:  Export LD_LIBRARY_PATH to locate the library.

如果出现以上错误,解决方式

找到libmysqlclient.so所在位置,在/etc/ld.so.conf中增加路径

[root@slt032qws38 ~]# vi /etc/ld.so.conf

添加一行

/usr/local/mysql/lib

运行 ldconfig 命令,让其生效。

[root@slt032qws38 ~]# ldconfig

4.使用插件

pg端:

--创建mysql_fdw插件

CREATE EXTENSION mysql_fdw;

--创建服务项目

CREATE SERVER mysql_server

FOREIGN DATA WRAPPER mysql_fdw

OPTIONS (host '127.0.0.1', port '3306');



--创建mapping

CREATE USER MAPPING FOR postgres

SERVER mysql_server

OPTIONS (username 'root', password 'Mysql@123');



--创建外部表

CREATE FOREIGN TABLE warehouse

(

​    warehouse_id int,

​    warehouse_name text,

​    warehouse_created timestamp

)

SERVER mysql_server

OPTIONS (dbname 'mypg', table_name 'warehouse');

mysql端

--创建数据库

mysql> create database mypg;

Query OK, 1 row affected (0.00 sec)



mysql> use mypg;

Database changed



--创建表

mysql> create table warehouse(warehouse_id int,warehouse_name text,warehouse_created timestamp);

Query OK, 0 rows affected (0.01 sec)



--插入数据

mysql>  INSERT INTO warehouse values (1, 'UPS', current_date);

Query OK, 1 row affected (0.01 sec)





mysql> INSERT INTO warehouse values (2, 'TV', current_date);

Query OK, 1 row affected (0.00 sec)



mysql> INSERT INTO warehouse values (3, 'Table', current_date);

Query OK, 1 row affected (0.00 sec)



--查看数据

mysql> select * from warehouse;

+--------------+----------------+---------------------+

| warehouse_id | warehouse_name | warehouse_created   |

+--------------+----------------+---------------------+

|            1 | UPS            | 2021-10-19 00:00:00 |

|            2 | TV             | 2021-10-19 00:00:00 |

|            3 | Table          | 2021-10-19 00:00:00 |

+--------------+----------------+---------------------+

3 rows in set (0.00 sec)

pg端查看数据

mypg=# select * from warehouse ;

 warehouse_id | warehouse_name |  warehouse_created  

--------------+----------------+---------------------

​            1 | UPS            | 2021-10-19 00:00:00

​            2 | TV             | 2021-10-19 00:00:00

​            3 | Table          | 2021-10-19 00:00:00

(3 rows)

mysql端修改数据

mysql> UPDATE warehouse set warehouse_name = 'UPS_NEW' where warehouse_id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from warehouse;
+--------------+----------------+---------------------+
| warehouse_id | warehouse_name | warehouse_created   |
+--------------+----------------+---------------------+
|            1 | UPS_NEW        | 2021-10-19 15:05:08 |
|            2 | TV             | 2021-10-19 00:00:00 |
|            3 | Table          | 2021-10-19 00:00:00 |
+--------------+----------------+---------------------+
3 rows in set (0.00 sec)

pg端查看

mypg=# select * from warehouse ;
 warehouse_id | warehouse_name |  warehouse_created  
--------------+----------------+---------------------
            1 | UPS_NEW        | 2021-10-19 15:05:08
            2 | TV             | 2021-10-19 00:00:00
            3 | Table          | 2021-10-19 00:00:00
(3 rows)

mysql端删除数据

mysql> DELETE FROM warehouse where warehouse_id = 3;
Query OK, 1 row affected (0.00 sec)

mysql> select * from warehouse;
+--------------+----------------+---------------------+
| warehouse_id | warehouse_name | warehouse_created   |
+--------------+----------------+---------------------+
|            1 | UPS_NEW        | 2021-10-19 15:05:08 |
|            2 | TV             | 2021-10-19 00:00:00 |
+--------------+----------------+---------------------+
2 rows in set (0.00 sec)

pg端查看

mypg=# select * from warehouse ;
 warehouse_id | warehouse_name |  warehouse_created  
--------------+----------------+---------------------
            1 | UPS_NEW        | 2021-10-19 15:05:08
            2 | TV             | 2021-10-19 00:00:00
(2 rows)

 

### 安装 MySQL_fdw 插件 为了在 PostgreSQL 中使用 `mysql_fdw` 插件,需先确认已安装适当版本的 PostgreSQLMySQL。以下是具体操作流程: #### 获取并构建 mysql_fdw 源码 可以通过克隆官方仓库来获取最新源码: ```bash git clone https://github.com/EnterpriseDB/mysql_fdw.git cd mysql_fdw ``` 接着按照说明文档编译源文件[^1]: ```bash make USE_PGXS=1 sudo make install USE_PGXS=1 ``` 此过程会将必要的共享库和 SQL 脚本复制到 PostgreSQL 的扩展目录。 #### 配置 PostgreSQL 使用 mysql_fdw 扩展 编辑 postgresql.conf 文件启用动态加载功能,并重启服务使更改生效: ```properties shared_preload_libraries = 'mysql_fdw' ``` 创建外部数据封装器所需的元数据表结构定义语句如下所示: ```sql CREATE EXTENSION IF NOT EXISTS mysql_fdw; ``` #### 设置连接参数 通过 CREATE SERVER 命令指定远程 MySQL 数据库实例的位置和其他属性: ```sql CREATE SERVER myserver FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host 'localhost', port '3306'); ``` 随后利用 USER MAPPING 映射本地角色至远端数据库账户名密码等认证凭证信息: ```sql CREATE USER MAPPING FOR CURRENT_USER SERVER myserver OPTIONS (username 'root', password 'secret'); ``` 最后导入目标模式下的对象列表以便后续查询访问: ```sql IMPORT FOREIGN SCHEMA myschema FROM SERVER myserver INTO local_schema; ``` 以上步骤完成后即可像对待常规关系型表格一样执行 SELECT、INSERT 或 UPDATE 等标准SQL命令对关联的数据集实施读写操作了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值