create mysql table in PostgreSQL with mysql_fdw

以前写过一些在PostgreSQL中创建file, CouchDB, Redis, PostgreSQL, Oracle等外部表的BLOG.

一直没有写MySQL的,刚好最近有一个项目要从MySQL迁移到PostgreSQL。今天补上如下 : 

下载

http://pgxn.org/dist/mysql_fdw/

1. 

修改PATH和LD_LIBRARY_PATH包含mysql和postgresql的相关目录, 例如

su - root
export MYSQLHOME=/usr/local/mysql
export PGHOME=/usr/local/pgsql
export LD_LIBRARY_PATH=$PGHOME/lib:$MYSQLHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib
export PATH=$PGHOME/bin:$MYSQLHOME/bin:$PATH:.
make USE_PGXS=1
make USE_PGXS=1 install

2. mysql中的测试表

mysql> desc CMSArticles
    -> ;
+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| articleid   | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| position    | int(11)          | NO   | MUL | 0       |                |
| cateid      | int(11) unsigned | NO   | MUL | 0       |                |
| db_id       | varchar(20)      | YES  | MUL | NULL    |                |
| title       | varchar(50)      | YES  |     | NULL    |                |
| link        | varchar(200)     | YES  |     | NULL    |                |
| icon        | varchar(200)     | YES  |     | NULL    |                |
| tag         | varchar(50)      | YES  |     | NULL    |                |
| keyword     | varchar(50)      | YES  |     | NULL    |                |
| tag_url     | varchar(200)     | YES  |     | NULL    |                |
| keyword_url | varchar(200)     | YES  |     | NULL    |                |
| summary     | varchar(300)     | YES  |     | NULL    |                |
| content     | text             | YES  |     | NULL    |                |
+-------------+------------------+------+-----+---------+----------------+

3. 在库中创建extension

psql -h 127.0.0.1 -U postgres -d digoal
# create extension mysql_fdw;
# create server mysql_server1 foreign data wrapper mysql_fdw options(address '127.0.0.1', port '3306');
# CREATE USER MAPPING FOR digoal server mysql_server1 options (username 'root', password 'Roote');
# grant usage on FOREIGN server mysql_server1 to digoal;
\c digoal digoal
> create FOREIGN TABLE mysql_foreign_table1 (articleid int8, position int8, cateid int8, db_id varchar(20), title varchar(50), link varchar(200), icon varchar(200), tag varchar(50), keyword varchar(50), tag_url varchar(200), keyword_url varchar(200), summary varchar(300), content text)
SERVER mysql_server1
OPTIONS (database 'my_digoal', table 'CMSArticles');
> select count(*) from CMSArticles;

与MySQL结果一致.

前面使用的是table选项, 另外一个创建外部表的参数, query. 如下 :

create FOREIGN TABLE mysql_foreign_table2 (articleid int8, position int8, cateid int8, db_id varchar(20), title varchar(50), link varchar(200), icon varchar(200), tag varchar(50), keyword varchar(50), tag_url varchar(200), keyword_url varchar(200), summary varchar(300), content text)
SERVER mysql_server1
OPTIONS (database 'my_digoal', query 'select articleid, position, cateid, db_id, title, link, icon, tag, keyword, tag_url, keyword_url, summary, content from CMSArticles where articleid=1');

【参考】

http://pgxn.org/dist/mysql_fdw/

http://blog.163.com/digoal@126/blog/static/163877040201141641148311/

http://blog.163.com/digoal@126/blog/static/16387704020119181188247/

http://blog.163.com/digoal@126/blog/static/163877040201181505331588/

http://blog.163.com/digoal@126/blog/static/16387704020118151162340/

时间: 2024-09-23 01:28:22

create mysql table in PostgreSQL with mysql_fdw的相关文章

use oracle_fdw create oracle foreign table in PostgreSQL

虽然测试查询ORACLE表没有成功.不过还是很令人期待.下面是测试过程. 2011-9-3放出的一个BETA版本. Foreign Data Wrapper for Oracle: beta release  可以在pgfoundry去下载源码. 我这里的测试环境 :  PostgreSQL9.1rc1 (编译安装的) RHEL5.6 64位 编译时文件oracle_utils.c爆出了一些错误: 代码里有几行: (OCINumber *)value = number; (OCIDateTime

Success use oracle_fdw create oracle foreign table in PostgreSQL

前几天拿0.9的版本测试的,测试没有成功,记录在BLOGhttp://blog.163.com/digoal@126/blog/static/16387704020118951953408/ 里面. 9月14号,作者上传了新版本0.9.1.测试成功. 下面是详细的测试过程. 测试环境: 操作系统: RHEL 5.2 64 bit 2.6.18-92.el5 #1 SMP Tue Jun 10 18:51:06 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux PG数

将你的网站从MySQL改为PostgreSQL

  <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 这个教程分为两部分,第一部分讲述了我进行这种转换的动机,并一步步地解释了如何将已存在有MySQL的数据转换到Postgres中.第二部分将会解释如何根据新的数据库系统对PHP进行相应的调整. 转换的动机 我第一次了解Postgres是在PHPBuilder网站的一篇文章中.这篇文章将Postgres和MySQL进行了比

解决mysql Table ‘xxx’ is marked as crashed and should be repaired的问题。

解决mysql Table 'xxx' is marked as crashed and should be repaired的问题. 某个表在进行数据插入和更新时突然出现Table 'xxx' is marked as crashed and should be repaired这个异常,随后整个表无法查询,表数据全部丢失. 解决办法: 切换至mysql bin目录 ./myisamchk -c -r 数据库表MYI文件的路径 例如:./myisamchk -c -r /home/mysql/

从MySQL导出到PostgreSQL

异构数据库的导入.导出是一个大难题.从MySQL到PG目前没有特别完善的工具,还需要人工的参与.本文将简单介绍下如何利用一些工具,手工将MySQL导出数据到PostgreSQL. 导出.转换.导入 数据导出.导入的思路是: 导出结构 导出数据 对结构进行转换 对数据进行转换 导入结构 导入数据 这里的想法是将结构和数据分开处理,这样有很多好处.首先DDL的语句的差别相比DML要大一些,比如各种类型的转换.符号的变化等,分开之后可以针对性的处理:其次,DDL和DML分开更好做批量的处理:其他好处-

将Django使用的数据库从MySQL迁移到PostgreSQL的教程_python

我们已对 Django1.6 app完成了数据库从mysql到PostgreSQL的迁移,如果你的环境很干净,这个过程就会很简单,只要允许syncdb 或者 migrate创建表,truncating表中的数据,然后运行dumpdata 和loaddatamanagement命令就完成了. 第一步,在你的PostgreSQL数据库中创建一个空的实例:   CREATE DATABASE dbname OWNER rolename; 第二步,在你的Django中给创建的数据库加上配置 在setti

mysql Table &#039;performance_schema.session_variables&#039; doesn&#039;t exist

测试环境搭了一个mariadb 5.7,使用jdbc驱动 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.34</version> </dependency> 在hibernate工程中正常. 临时搭建了一个jdbc的简单工程,发现连接数据库报错: Table 'pe

关于Mapxtreme建表时的 Unable to create new table

问题描述 我从SQLSERVER2008上加载地图在另存为TAB文件当执行到DimtAsMapInfo.Data.Table=MapInfo.Engine.Session.Current.Catalog.CreateTable(tf)报错:Unabletocreatetable:Unabletocreatenewtable代码如下:DimtabtestAsString="铁路L_polyline"DimnewtestAsString="铁路L_polyline"Di

MySQL中create table语句的基本语法是_php基础

MySQL中create table语句的基本语法是:  Create [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]  [table_options] [select_statement]  TEMPORARY:该关键字表示用create table新建的表为临时表,此表在当前会话结束后将自动消失.临时表主要被应用于存储过程中,对于目前尚不支持存储过程的MySQL,该关键字一般不用.  IF NOT EX