一般来说数据库表的导入导出都是在同一类型的数据库中操作比较常见,不同类型数据库之间的操作不太常见。因为毕竟不同类型数据库之间会有一些差别,在跨库导入的时候需要修改一些东西才能保证正常导入另一种类型数据库中。正好在工作中遇到了这种情况,是要把postgresql中的表导入到mysql数据库中去,总结了两种方式,希望大家可以用来参考一下(如有不对,还请多提宝贵意见)。
第一种:通过Navicat for PostgreSQL工具来进行(这个工具可以在百度上下载)
大概的步骤:通过该工具提供的把数据库或者表生成sql文件的功能来进行导出,然后再将导出的sql文件进行修改,之后将修改的sql文件导入到mysql中去
然后在该表名上右键进行导出操作(可以导出表结构或者表数据和结构,我这里是导出表结构和数据),将导出的sql文件保存到一个位置中
下面是导出来的sql文件部分内容:
是不是觉得和mysql的sql文件差不多,但是问题就是出现在细节上,下面就放一张mysql的sql文件,来对比下
接下来就是要修改postgresql的sql脚本了,修改的地方一般有以下几个地方:
1." 要改成 `
2.对于字段的说明不能是 COMMENT ON COLUNN "XXX" IS "XXX" 这种方式要改成mysql对字段的说明
3,postgresqlz中的一些函数和方法mysql是不能识别的也要去掉比如nextval('tb_cad_sql'::regclass)
4.以防万一把sql文件里面的注释型的内容也去掉
5.对于我的这个sql文件来说要把里面的“soc”.去掉
经过一番修改后的sql内容如下:
用下面的命令mysql -uroot -p test </root/tb_audit.sql 在mysql数据库中导入 。(用户名密码和数据库都是按照我的来的,下面命令中的都一样)
第二种:用命令行的方式导入导出
步骤:先导出表结构在导出表数据,修改后再导入表结构和表数据
首先进入到postgresql的安装目录的bin目录下面执行 ./pg_dump -Usoc -t tb_cad -s soc>/root/tb_cad.sql(-s是导出表结构 -t是那张表,soc是对应的数据库,如果执行./pg_dump -Usoc -t tb_cad soc>/root/tb_cad.sql导出的sql文件里面是包含了表结构和表中数据,但是里面会出现copy命令,就是向表里面插入数据,这个我没有调好,所以没有用这个命令。)这条命令导出的是表结构,内容如下:
修改同上面修改一样,修改后的内容如下:
然后用下面的命令mysql -uroot -p test </root/tb_audit.sql 在mysql数据库中导入(此时导入进去的是一张空表)
然后在postgresql数据库的bin目录下执行./pg_dump -Usoc -t tb_cad -a --column-inserts soc>/root/tb_cad.sql导出表数据(-a是只导数据,--colunm-inserts是将每条数据以insert语句进行插入)得到的内容如下:
经过修改内容如下:
然后在mysql数据库中对应的数据库下面执行命令 load data local infile '/root/tb_cad.sql' into table tb_cad ;
ok,两种方式演示完毕,如有错误,请提出。