postgresql的数据库怎么迁移到mysql-CSDN论坛

 我来答
奔跑的窝牛的家
高粉答主

2016-10-22 · 每个回答都超有意思的
知道顶级答主
回答量:3.6万
采纳率:98%
帮助的人:4493万
展开全部
MySQL数据库迁移到PostgreSQL
查了不少资料,也尝试了一些,最后采用的办法如下:
1. 导出mysql表定义(无数据)
mysqldump --no-data [dbname] >dbdef.sql
2. 使用mysql2postgres把脚本转换为pgsql
3. 上面生成的脚本还不一定很完美,可以尝试导入pgsql,调试错误并手动修改之。我遇到的问题就只有一个,mysql列定义中的zerofill需要手工去掉。一些unsinged定义会生成constraint,如果不需要可以去掉。另外,trigger都有问题,只能后面手工重建
4. 导出mysql数据:
mysqldump -v -nt --complete-insert=TRUE --compact --no-create-info --skip-quote-names [dbname] >dbdata.sql
老一些版本的pgsql如果不支持批量插入的话还需要加上--extended-insert=FALSE,这个性能损失巨大。
5. 转义符
mysql默认字符串里的'\'是转义符,而pgsql默认不是,修改postgresql.conf:
backslash_quote = on
escape_string_warning = off
standard_conforming_strings = off
数据导入完成后可以改回默认值。
5. pgsql里导入表定义和数据
psql -d [dbname] <dbdef.sql
psql -d [dbname] <dbdata.sql
6. 重建trigger
7. 自增主键(字段)的处理
由于导入数据时此字段都是有值的,所以pgsql里面seq并不会增加,可以用如下语句设置自增列的当前值:
SELECT setval('sample_id_seq',max(id)) from sample;

最后,如果数据量大,导入时考虑性能可以先把主键、索引、约束都去掉,导入完成后再加上。另外,psql客户端从管道导入数据似乎不够快,可以用tcp方式psql -h localhost ,还有一些为大数据量导入优化的参数,大概列一下:
autovacuum = off
wal_level = minimal
archive_mode = off
full_page_writes = off
fsync = off
checkpoint_segments = 50
checkpoint_timeout = 1h
maintenance_work_mem视内存情况尽量大点
仁科信息
2024-07-24 广告
Oracle EBS运维是确保企业资源规划系统稳定、高效运行的关键环节。它涵盖了系统监控、性能优化、故障排查与恢复等多方面内容。通过持续的监控和数据分析,运维团队能够及时发现并解决潜在问题,保障系统的稳定性和安全性。同时,他们还需要与业务部... 点击进入详情页
本回答由仁科信息提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式