PostgreSQL通过mysql_fdw访问MySQL数据库
Mysql与PostgreSQL的安装过程省略。
为简便起见,把MySQL和PostgreSQL都安装在一个机器上,然后在此机器上(准确地说是在PostgreSQL运行的机器上)安装mysql_fdw:
首先是下载 mysql_fdw:
http://pgxn.org/dist/mysql_fdw/
mysql_fdw-1.0.1.zip
然后是解压和安装:
[root@server mysql_fdw-1.0.]# pwd
/soft/fdw/mysql_fdw-1.0.
[root@server mysql_fdw-1.0.]# ls
META.json Makefile README mysql_fdw--1.0.sql mysql_fdw.c mysql_fdw.control
运行 make 和 make install,其README文件说得很清楚:
[root@server mysql_fdw-1.0.]# cat README
MySQL FDW for PostgreSQL 9.1+
============================== This PostgreSQL extension implements a Foreign Data Wrapper (FDW) for
the MySQL. This code is experimental, and largely intended as a pet project for me
to experiment with and learn about FDWs in PostgreSQL. By all means use it, but do so entirely at your own risk! You have been
warned! Building
-------- Install MySQL, or just the C client library, and Once that's done, the
extension can be built with: PATH=/usr/local/pgsql/bin/:/usr/local/mysql/bin:$PATH make USE_PGXS=
sudo PATH=/usr/local/pgsql/bin/:/usr/local/mysql/bin:$PATH make USE_PGXS= install (assuming you have PostgreSQL 9.1 in /usr/local/pgsql and MySQL in
/usr/local/mysql). I've tested on Mac OS X 10.7 only, but other *nix's should also work.
I haven't tested on Windows, but the code should be good on MinGW. Limitations
----------- - No attempt is made to pushdown quals to MySQL. - The MySQL connection used to plan queries isn't currently reused
during execution. Usage
----- The following parameters can be set on a MySQL foreign server: address: The address or hostname of the MySQL server.
Default: 127.0.0.1 port: The port number on which the MySQL server is listening.
Default: The following parameter can be set on a MySQL foreign table: database: The name of the MySQL database to query.
Default: NULL query: An SQL query to define the data set on the MySQL server. table: The name of a table (quoted and qualified as required)
on the MySQL table. Note that the query and table paramters are mutually exclusive. Using
query can provide either a simple way to push down quals (which of
course is fixed at definition time), or to base remote tables on
more complex SQL queries. The following parameter can be set on a user mapping for a MySQL
foreign server: username: The username to use when connecting to MySQL
Default <none> password: The password to authenticate to the MySQL server with.
Default: <none> Example
------- -- Install the extension
CREATE EXTENSION mysql_fdw; -- Create the foreign server, a pointer to the MySQL server.
CREATE SERVER mysql_svr
FOREIGN DATA WRAPPER mysql_fdw
OPTIONS (address '127.0.0.1', port ''); -- Create one or more foreign tables on the MySQL server. The first of
-- these maps to a remote table, whilst the second uses an SQL query.
CREATE FOREIGN TABLE employees (
id integer,
name text,
address text)
SERVER mysql_svr
OPTIONS (table 'hr.employees'); CREATE FOREIGN TABLE overtime_2010 (
id integer,
employee_id integer,
hours integer)
SERVER mysql_svr
OPTIONS (query 'SELECT id, employee_id, hours FROM hr.overtime WHERE year = 2010;'); -- Create a user mapping to tell the FDW the username/password to
-- use to connect to MySQL, for PUBLIC. This could be done on a per-
-- role basis.
CREATE USER MAPPING FOR PUBLIC
SERVER mysql_svr
OPTIONS (username 'dpage', password ''); --
Dave Page
dpage@pgadmin.org
[root@server mysql_fdw-1.0.]#
[root@server mysql_fdw-1.0.]# PATH=/usr/local/pgsql/bin/:/usr/local/mysql/bin:$PATH make USE_PGXS=1
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wformat-security -fno-strict-aliasing -fwrapv -fpic -I/usr/local/mysql/include -I. -I. -I/usr/local/pgsql/include/server -I/usr/local/pgsql/include/internal -D_GNU_SOURCE -c -o mysql_fdw.o mysql_fdw.c
mysql_fdw.c: In function 'mysqlPlanForeignScan':
mysql_fdw.c:: 警告: 'rows' may be used uninitialized in this function
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wformat-security -fno-strict-aliasing -fwrapv -fpic -shared -o mysql_fdw.so mysql_fdw.o -L/usr/local/pgsql/lib -Wl,-rpath,'/usr/local/pgsql/lib',--enable-new-dtags -L/usr/local/mysql/lib -lmysqlclient -lpthread -lm -lrt -ldl
[root@server mysql_fdw-1.0.]# sudo PATH=/usr/local/pgsql/bin/:/usr/local/mysql/bin:$PATH make USE_PGXS=1 install
/bin/mkdir -p '/usr/local/pgsql/lib'
/bin/mkdir -p '/usr/local/pgsql/share/extension'
/bin/sh /usr/local/pgsql/lib/pgxs/src/makefiles/../../config/install-sh -c -m mysql_fdw.so '/usr/local/pgsql/lib/mysql_fdw.so'
/bin/sh /usr/local/pgsql/lib/pgxs/src/makefiles/../../config/install-sh -c -m ./mysql_fdw.control '/usr/local/pgsql/share/extension/'
/bin/sh /usr/local/pgsql/lib/pgxs/src/makefiles/../../config/install-sh -c -m ./mysql_fdw--1.0.sql '/usr/local/pgsql/share/extension/'
[root@server mysql_fdw-1.0.]#
检查一下 mysql_fdw.so文件,是否出现在 /usr/local/pgsql/lib 目录下。
然后,分别启动mysql和 postgresql:
[root@server ~]# mysqld_safe &
[]
[root@server ~]# :: mysqld_safe Logging to '/usr/local/mysql/data/server.gao.err'.
:: mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
[root@server ~]# su - postgres
[postgres@server ~]$ pwd
/home/postgres
[postgres@server ~]$ cd /usr/local/pgsql
[postgres@server pgsql]$ ./bin/pg_ctl -D ./data start
server starting
[postgres@server pgsql]$ LOG: database system was shut down at -- :: CST
LOG: autovacuum launcher started
LOG: database system is ready to accept connections
然后,在mysql客户端,执行以下命令来创建表以及访问该表的用户:
[root@server ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.13 MySQL Community Server (GPL) Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Database changed
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec) mysql> select host,user from mysql.user;
+------------+--------+
| host | user |
+------------+--------+
| % | usrabc |
| 127.0.0.1 | root |
| ::1 | root |
| localhost | |
| localhost | root |
| server.gao | |
| server.gao | root |
+------------+--------+
7 rows in set (0.08 sec) mysql> select * from example;
ERROR 1146 (42S02): Table 'mysql.example' doesn't exist
mysql> CREATE TABLE example ( id INT,data VARCHAR(100) );
Query OK, 0 rows affected (0.05 sec) mysql> quit
Bye
[root@server ~]# mysql -uusrabc -p
Enter password:
ERROR 1045 (28000): Access denied for user 'usrabc'@'localhost' (using password: YES)
[root@server ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.6.13 MySQL Community Server (GPL) Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> create user 'usrabc'@'localhost' identified by 'usrabc';
Query OK, 0 rows affected (0.00 sec) mysql> GRANT SELECT, INSERT, DELETE,UPDATE ON *.* TO 'usrabc'@'localhost';
Query OK, 0 rows affected (0.00 sec) mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec) mysql>
然后,开始在PostgreSQL端,建立FDW:
[postgres@server pgsql]$ ./bin/psql
psql (9.1.2)
Type "help" for help. postgres=# CREATE EXTENSION mysql_fdw;
ERROR: extension "mysql_fdw" already exists
postgres=# CREATE SERVER mysql_svr FOREIGN DATA WRAPPER mysql_fdw OPTIONS (address '127.0.0.1', port '');
CREATE SERVER postgres=# CREATE FOREIGN TABLE example (id INT,data VARCHAR(100) ) SERVER mysql_svr
postgres-# OPTIONS (table 'mysql.example');
CREATE FOREIGN TABLE
postgres=#
postgres=# CREATE USER MAPPING FOR PUBLIC SERVER mysql_svr OPTIONS (username 'usrabc', password 'usrabc');
CREATE USER MAPPING
postgres=#
postgres=# select * from example;
ERROR: failed to connect to MySQL: Access denied for user 'usrabc'@'localhost' (using password: YES)
postgres=#
postgres=# select * from example;
id | data
----+------
(0 rows) postgres=#
此时,在mysql端,增加数据:
mysql> insert into mysql.example values(123,'');
Query OK, 1 row affected (0.01 sec) mysql> select * from example;
ERROR 1046 (3D000): No database selected
mysql> select * from mysql.example;
+------+-------+
| id | data |
+------+-------+
| 123 | 11111 |
+------+-------+
1 row in set (0.00 sec) mysql>
然后,在psql端验证:
postgres=# select * from example;
id | data
-----+-------
123 | 11111
(1 row) postgres=#
结束
PostgreSQL通过mysql_fdw访问MySQL数据库的更多相关文章
- java文件来演示如何访问MySQL数据库
java文件来演示如何访问MySQL数据库. 注:在命令行或用一个SQL的前端软件创建Database. 先创建数据库: CREATE DATABASE SCUTCS; 接着,创建表: CREATE ...
- PHP访问MySql数据库介绍
在网站后台,经常要与数据库打交道.本文介绍如何使用XAMPP来管理MySql数据库及如何用PHP来访问MySql数据库. 一.使用XAMPP来管理MySql数据库 首先使用XAMPP打开MySql的管 ...
- C#连接、访问MySQL数据库
一.准备工具 visual stuido(本示例使用visual studio 2010) MySql.Data.dll mysql_installer_community_V5.6.21.1_set ...
- 在Eclipse中使用JDBC访问MySQL数据库的配置方法
在Eclipse中使用JDBC访问MySQL数据库的配置方法 分类: DATABASE 数据结构与算法2009-10-10 16:37 5313人阅读 评论(10) 收藏 举报 jdbcmysql数据 ...
- C#访问MySQL数据库(winform+EF)
原文:C#访问MySQL数据库(winform+EF) 以前都是C#连接SQLServer,现在MySQL也比较火了,而且是开源跨平台的,这里连接使用一下,主要是体会一下整个流程,这里使用的是winf ...
- Spring Boot入门(六):使用MyBatis访问MySql数据库(注解方式)
本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 本篇博客我们讲解下在Spring Boot中使用MyBatis访问MySql数据库的简单用法. 1.前期 ...
- html页面通过http访问mysql数据库中的内容,实现用户登录的功能
需求: 通过html编写用户登录页面,页面内容包括用户名.密码和登录按钮,点击登录后访问login.php文件,使用按钮默认的submit提交用户名和密码,在login.php中访问mysql数据库, ...
- 关于利用PHP访问MySql数据库的逻辑操作以及增删改查实例操作
PHP访问MySql数据库 <?php //造连接对象$db = new MySQLi("localhost","root","",& ...
- C#访问MySQL数据库的方法
C#访问MySQL数据库的方法 (1)首先需要下载C#访问MySQL数据库的ADO.NET驱动程序 下载地址为: http://dev.mysql.com/downloads/connector/ne ...
随机推荐
- MySQL面试宝典
==============================================# 参数==============================================auto ...
- 《metasploit渗透测试魔鬼训练营》学习笔记第六章--客户端渗透
四.客户端攻击 客户端攻击与服务端攻击有个显著不同的标识,就是攻击者向用户主机发送的恶意数据不会直接导致用户系统中的服务进程溢出,而是需要结合一些社会工程学技巧,诱使客户端用户去访问这些恶意 ...
- Linux系统的环境变量$PATH
$PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接. 修改$PATH的方法有很多,比如: export PA ...
- ActiveRecord初始化,可以实现jfinal系统启动完成后,再建立数据库连接
1.JFinalConfig的afterJFinalStart方法,可以实现系统启动成功后,调用的方法 2.ActiveRecord 多数据源初始化 package com.meiah.common; ...
- 字符型设备驱动程序-first-printf以及点亮LED灯(二)
编译这几个函数之前要学一下:Linux 的几个操作命令. 学习地址:http://edu.51cto.com/lesson/id-101824.html 重要的命令 有4个 :分别是 1.lsmod, ...
- C# 中的#if、#elif、#else、#endif等条件编译符号 (转载)
这些是C#中的条件编译符号.这些指令我在项目中遇到过,查过网络,问过人(当然,既不认识大牛,也不认识小牛,所以没什么收获).今天翻看一本资料,有提到这个方面的东西,所以写下来和能看到这篇文章的人一起学 ...
- JavaScript this用法
当this为全局变量时,this为window对象 <script> // 在全局变量中,this为window window.onload= function(){ alert(wind ...
- 多线程系列之 java多线程的个人理解(二)
前言:上一篇多线程系列之 java多线程的个人理解(一) 讲到了线程.进程.多线程的基本概念,以及多线程在java中的基本实现方式,本篇主要接着上一篇继续讲述多线程在实际项目中的应用以及遇到的诸多问题 ...
- 「微信小程序」PHP异步进程async-helper实例详解
PHP异步进程async-helper实例详解 PHP 的异步进程助手,借助于 AMQP 实现异步执行 PHP 的方法,将一些很耗时.追求高可用.需要重试机制的操作放到异步进程中去执行,将你的 HTT ...
- vue 父子组件的生命周期顺序
一.加载渲染过程 父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount ...