为PostgreSQL编译Windows下的mysql_fdw

(大约今天8点20发)

这里提供一个蹩脚的mysql_fdw在Windows下的编译方法,说蹩脚是因为这个步骤不是自动化的。所有的Windows编译脚本都在 src/tools/msvc 下边,有兴趣可以读一读,主要是Perl脚本,不难理解。

1、下载安装mysql客户端

https://dev.mysql.com/downloads/installer/

下载mysql-installer-web-community即可,不需要下载那个几百M的,安装时选择 MySQL Connector/C。

我把目录放在 C:\MySQL\6.1,所有的 include、lib都在这里。

2、下载mysql_fdw源代码,放到 contrib下,并且在Makefile增加

https://github.com/EnterpriseDB/mysql_fdw

		ltree		\
		mysql_fdw	\
		oid2name	\

3、修改 src/tools/msvc/Solution.pm
sub AddProject 在这里增加最后两行,用前两行参考位置,如果安装位置有区别请自行调整。

	push @{ $self->{projects}->{$folder} }, $proj;
	$proj->AddDir($initialdir) if ($initialdir);
	if ($name eq 'mysql_fdw')
	{
		$proj->AddIncludeDir('C:\MySQL\6.1\include');
		$proj->AddLibrary('C:\MySQL\6.1\lib\libmysql.lib');
	}

4、修改 src/include/pg_config_manual.h 增加

#define _MYSQL_LIBNAME "C:\\MySQL\\6.1\\lib\\libmysql.dll"

5、修改 mysql_fdw.c

增加一个引用

#include "dynloader.h"

 代码修改

mysql_dll_handle = dlopen(_MYSQL_LIBNAME, RTLD_LAZY | RTLD_DEEPBIND);
改为
mysql_dll_handle = dlopen(_MYSQL_LIBNAME, 1);

6、编译PG,参考我博客里的文章

有一堆警告,编译通过,测试:

flying=# create extension mysql_fdw;
CREATE EXTENSION

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

flying=# CREATE USER MAPPING FOR "Quan Zongliang"
flying-# SERVER mysql_server
flying-# OPTIONS (username 'foo', password 'bar');
CREATE USER MAPPING

flying=# CREATE FOREIGN TABLE warehouse(
flying(#      warehouse_id int,
flying(#      warehouse_name text,
flying(#      warehouse_created timestamp)
flying-# SERVER mysql_server
flying-#      OPTIONS (dbname 'db', table_name 'warehouse');
CREATE FOREIGN TABLE

flying=# select * from warehouse;
ERROR:  failed to connect to MySQL: Can't connect to MySQL server on '127.0.0.1' (10061)

因为我并没有装MySQL,连接会失败,但已经说明它是正常的。

转载于:https://my.oschina.net/quanzl/blog/3072602

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值