為PostgreSQL編譯Windows下的mysql_fdw
阿新 • • 發佈:2019-07-11
(大約今天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,連線會失敗,但已經說