gpt4 book ai didi

mysql - 在Linux(Kubuntu)上从MySQL迁移到PostgreSQL

转载 作者:IT老高 更新时间:2023-10-28 23:53:10 25 4
gpt4 key购买 nike

很久以前,在一个遥远的系统上…
尝试将数据库从mysql迁移到postgresql。我读过的所有文档都非常详细地介绍了如何迁移结构。我几乎没有找到关于迁移数据的文档。该架构有13个表(已成功迁移)和9 GB的数据。
MySQL版本:5.1.x
PostgreSQL版本:8.4.x
我想用r编程语言用sql select语句来分析数据,postgresql有pl/r,mysql没有pl/r(据我所知)。
新的希望
创建数据库位置(/var空间不足;也不喜欢到处都有PostgreSQL版本号——升级会破坏脚本!):
sudo mkdir -p /home/postgres/main
sudo cp -Rp /var/lib/postgresql/8.4/main /home/postgres
sudo chown -R postgres.postgres /home/postgres
sudo chmod -R 700 /home/postgres
sudo usermod -d /home/postgres/ postgres
一切都很好。接下来,重新启动服务器并使用以下命令配置数据库:
sudo apt-get install postgresql pgadmin3
sudo /etc/init.d/postgresql-8.4 stop
sudo vi /etc/postgresql/8.4/main/postgresql.conf
data_directory更改为/home/postgres/main
sudo /etc/init.d/postgresql-8.4 start
sudo -u postgres psql postgres
\password postgres
sudo -u postgres createdb climate
pgadmin3
使用pgadmin3配置数据库并创建架构。
这一事件在一个名为bash的远程shell中继续,两个数据库都在运行,并且安装了一组带有相当不寻常徽标的工具:installation instructions
perl Makefile.PL
sudo make install
sudo apt-get install perl-doc(奇怪的是,它没有被称为perldoc
perldoc SQL::Translator::Manual
提取PostgreSQL友好的DDL和所有MySQL数据:
sqlt -f DBI --dsn dbi:mysql:climate --db-user user --db-password password -t PostgreSQL > climate-pg-ddl.sql
编辑climate-pg-ddl.sql并将标识符转换为小写,然后插入模式引用(使用vim):
:%s/"\([A-Z_]*\)"/\L\1/g
:%s/ TABLE / TABLE climate./g
:%s/ on / on climate./g
mysqldump --skip-add-locks --complete-insert --no-create-db --no-create-info --quick --result-file="climate-my.sql" --databases climate --skip-comments -u root -p
只需将mysql中的表和列重命名为小写就可以了:
select concat( 'RENAME TABLE climate.', TABLE_NAME, ' to climate.', lower(TABLE_NAME), ';' ) from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='climate';
执行上一步中的命令。
可能有一种方法可以对列执行同样的操作;我手动更改它们,因为这比找出如何编写查询要快。
数据库反击
在PostgreSQL中重新创建结构如下:
pgadmin3(切换到它)
单击“执行任意SQL查询”图标
打开climate-pg-ddl.sql
搜索“替换为”(插入架构名称)
搜索“替换为”(插入架构名称)
TABLE "执行
这将导致:

Query returned successfully with no result in 122 ms.

绝地武士的回答
在这一点上,我被难住了。
我应该从这里(步骤是什么)转到哪里将 TABLE climate."转换为 climate以便对PostgreSQL执行它们?
如何确保索引被正确复制(为了保持引用完整性;我目前没有减轻转换的约束)?
如何确保在PostgreSQL中添加新行将从插入的最后一行的索引开始枚举(并且不会与序列中现有的主键冲突)?
在将数据从MySQL转换为PostgreSQL插入时,如何确保模式名是通过的?
资源
要做到这一点,需要一点信息:
SQL Fairy
https://help.ubuntu.com/community/PostgreSQL
http://articles.sitepoint.com/article/site-mysql-postgresql-1
http://wiki.postgresql.org/wiki/Converting_from_other_Databases_to_PostgreSQL#MySQL
http://pgfoundry.org/frs/shownotes.php?release_id=810
谢谢您!

最佳答案

我通常为这种迁移做两方面的工作:
从MySQL中提取整个数据库定义,并使其适应PostgreSQL语法。
检查数据库定义并转换它,以利用PostgreSQL中MySQL中不存在的功能。
然后进行转换,用您最熟悉的语言编写一个程序,完成以下任务:
从MySQL数据库中读取数据。
对要存储在PostgreSQL数据库中的数据执行任何必要的转换。
将现在转换的数据保存在PostgreSQL数据库中。
为PostgreSQL重新设计表以利用其特性。
如果您只需要使用sed脚本将SQL转储从一种格式转换为下一种格式,那么您所要做的就是将MySQL数据库放入PostgreSQL服务器。您可以这样做,这样做仍然会有一些好处,但是如果您要迁移,请完全迁移。
这将需要更多的前期时间,但我还没有遇到一个不值得的情况。

关于mysql - 在Linux(Kubuntu)上从MySQL迁移到PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2831009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com