侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

PG二进制包编译Windows下mysql_fdw

2024-02-22 星期四 / 0 评论 / 0 点赞 / 30 阅读 / 4197 字

1.mysql_fdw源码克隆 链接:https://github.com/EnterpriseDB/mysql_fdw/releases 选择最新版REL-2_5_1 2.mysql_fdw编译安装

1.mysql_fdw源码克隆
链接:https://github.com/EnterpriseDB/mysql_fdw/releases
选择最新版REL-2_5_1
2.mysql_fdw编译安装
    下载来的源码不自带window工程文件,自己新建工程,将源码加入


    工程依赖PostgreSQL和mysql,  C++编译附加包含目录需要设置相应目录
文件路径自己修改:以我的为例使用的是PostgreSQL9.5.4和mysql5.7.2
C:/Program Files/PostgreSQL/9.5/include
C:/Program Files/PostgreSQL/9.5/include/server
C:/Program Files/PostgreSQL/9.5/include/server/port/win32
C:/Program Files/PostgreSQL/9.5/include/server/port/win32_msvc
D:/MySQL/MySQL Server 5.7/include

链接目录
C:/Program Files/MySQL/MySQL Server 5.7/lib/libmysql.lib
C:/Program Files/PostgreSQL/9.5/lib/postgres.lib


MYSQL_FDW.def文件(通过模块定义文件导入)
设置需要导出的函数
Pg_magic_func
  _PG_init
  is_foreign_expr
  mysql_append_where_clause
  mysql_bind_result
  mysql_bind_sql_var
  mysql_cleanup_connection
  mysql_connect
  mysql_convert_to_pg
  mysql_deparse_analyze
  mysql_deparse_delete
  mysql_deparse_insert
  mysql_deparse_select
  mysql_deparse_update
  mysql_dll_handle DATA
  mysql_fdw_handler
  mysql_fdw_validator
  mysql_fdw_version
  mysql_get_connection
  mysql_get_options
  mysql_is_valid_option
  mysql_load_library
  mysql_rel_connection
  pg_finfo_mysql_fdw_handler
  pg_finfo_mysql_fdw_validator
  pg_finfo_mysql_fdw_version

3.mysql_fdw库导入PG
1)将mysql_fdw.control、mysql_fdw--1.0.sql、mysql_fdw--1.0--1.1.sqlmysql_fdw--1.1.sql复制到C:/Program Files/PostgreSQL/9.5/share/extension目录下
2)将生成的mysql_fdw.dll复制到C:/Program Files/PostgreSQL/9.5/lib目录下

注意:由于项目在编译时将libmysql.dll引用路径定死了(C:/Program Files/MySQL/MySQL Server 5.7/lib),当生成的mysql_fdw.dll移植到其他机器时,libmysql.dll路径不一致或者不存在则出现以下错误提示:


解决办法:采用方法2
(1)人为添加C:/Program Files/MySQL/MySQL Server 5.7/lib目录和libmysql.dll文件;
(2)将libmysql.dll在编译解决添加到C:/Program Files/PostgreSQL/9.5/lib目录下并包含--由于数据库的安装目录是确定的;
说明:以上两种方法都依赖libmysql.dll文件的路径,都不是最佳解决方案。

4.mysql_fdw测试
1.mysql
--mysql(账号:root; 密码:123456)
--进入Mysql设置基本测试表
mysql -uroot -p123456

mysql> show databases;
mysql> create database mydb;
mysql> show databases;
mysql> use mydb;
mysql> show tables;

mysql> CREATE TABLE example ( id INT,data VARCHAR(100) );
mysql> INSERT INTO example VALUES (1,'aaa');
mysql> INSERT INTO example VALUES (2,'bbb');
mysql> INSERT INTO example VALUES (3,'ccc');
mysql> INSERT INTO example VALUES (4,'ddd');
mysql> INSERT INTO example VALUES (5,'eee');
mysql> show tables;
mysql> select * from example;


2.postgresql
postgres=# CREATE EXTENSION mysql_fdw;
CREATE EXTENSION

postgres=# CREATE SERVER mysql_server FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host '127.0.0.1', port '3306');
CREATE SERVER

postgres=# CREATE USER MAPPING FOR PUBLIC SERVER mysql_server OPTIONS (username 'root', password '123456');
CREATE USER MAPPING

postgres=# CREATE FOREIGN TABLE example (id INT,data VARCHAR(100) ) SERVER mysql_server OPTIONS (dbname 'mydb', table_name 'example');
CREATE FOREIGN TABLE

postgres=# SELECT * FROM example;
 id | data 
----+------
  1 | aaa
  2 | bbb
  3 | ccc
  4 | ddd
  5 | eee
(5 rows)

postgres=# 


 

广告 广告

评论区