从 MySQL 迁移到 PostgreSQL [关闭]

Posted

技术标签:

【中文标题】从 MySQL 迁移到 PostgreSQL [关闭]【英文标题】:Migrating from MySQL to PostgreSQL [closed] 【发布时间】:2010-09-06 06:32:45 【问题描述】:

我们目前正在将 mysql 用于我们正在构建的产品,并渴望尽快迁移到 PostgreSQL,主要是出于许可原因。

有没有其他人做过这样的举动?我们的数据库是应用程序的命脉,最终将存储 TB 的数据,所以我很想听听性能改进/损失、转换 SQL 和存储过程的主要障碍等方面的经验。

编辑:只是为了向那些询问我们为什么不喜欢 MySQL 许可的人澄清一下。我们正在开发一种商业产品,它(目前)依赖于 MySQL 作为数据库后端。他们的许可证规定我们需要向他们支付每次安装标价的一定百分比,而不是固定费用。作为一家初创公司,这并不吸引人。

【问题讨论】:

这里有一些关于这个主题的优秀技术文章:wiki.postgresql.org/wiki/… 复制可能是您的问题。 MySQL 开箱即用地支持它。 【参考方案1】:

我们从 MySQL3 迁移到 PostgreSQL 8.2,然后是 8.3。 PostgreSQL 具有 SQL 的基础知识和更多,所以如果你的 MYSQL 不使用花哨的 MySQL 东西,你会没事的。

根据我的经验,我们的 MySQL 数据库(第 3 版)没有外键……PostgreSQL 允许你拥有它们,所以我们必须改变它……这是一件好事,但我们发现了一些错误。

我们必须更改的另一件事是编码 (C#) 连接器,这在 MySQL 中是不同的。 MySQL 比 PostgreSQL 更稳定。 PostgreSQL 的问题仍然很少。

【讨论】:

"Postgresql", "PostGreSql", "PostGresql" => "PostgreSQL" ;-) 叹息。九个赞成评论,但没有人去进行编辑。成为公平的 *** 用户!【参考方案2】:

我进行了类似的转换,但出于不同的原因。这是因为我们需要更好的 ACID 支持,以及让 Web 用户通过其他 DB 工具看到相同数据的能力(两者一个 ID)。

以下是困扰我们的事情:

    MySQL 不强制执行约束 与 PostgreSQL 一样严格。 有不同的日期处理例程。这些将需要手动转换。 任何不需要 ACID 的代码 合规性可能是个问题。

也就是说,一旦它到位并经过测试,它就会好得多。出于安全原因的正确锁定和大量并发使用,PostgreSQL 的性能优于 MySQL。在不需要锁定(只读)的地方,性能不太好,但仍然比网卡快,所以这不是问题。

提示:

contrib 中的自动化脚本 目录是一个很好的起点 为您的转换,但需要 经常被摸一下。 我强烈建议您 使用可序列化的隔离 默认级别。 pg_autodoc 工具适用于 真正看到你的数据结构和 帮助找到你的任何关系 忘记定义和执行了。

【讨论】:

【参考方案3】:

Steve,我不得不迁移我的旧应用程序,即 PgSQL->MySQL。我必须说,你应该认为自己很幸运;-) 常见的陷阱是:

SQL 实际上非常接近语言标准,因此您可能会被 MySQL 的方言所困扰 MySQL 悄悄地截断超过最大长度的 varchar,而 Pg 抱怨 - 快速解决方法是将这些列作为“文本”而不​​是“varchar”并使用触发器来截断长行 使用双引号代替反撇号 布尔字段使用 IS 和 IS NOT 运算符进行比较,但 MySQL 兼容的 INT(1) 与 = 和 仍然是可能的 没有 REPLACE,使用 DELETE/INSERT 组合 Pg 在强制外键完整性方面非常严格,所以不要忘记在引用上使用 ON DELETE CASCADE 如果你在 PDO 中使用 php,记得给 lastInsertId() 方法传递一个参数 - 它应该是序列名,通常这样创建:[tablename]_[primarykeyname]_seq

我希望这至少会有所帮助。玩 Postgres 玩得开心!

【讨论】:

以上是关于从 MySQL 迁移到 PostgreSQL [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

从 MySQL 迁移到 PostgreSQL 后类似查询的 SQL 性能问题

从 mysql 迁移到 postgresql 时,Laravel 雄辩的 ORM 不起作用

从 MSSQL 迁移到 postgresql 或 mysql [关闭]

AskTUG 论坛迁移实战:Discourse 从 PostgreSQL 到 MySQL 到 TiDB | 极客分享第 36 期

两年内从MySQL迁移到PostgreSQL?这家欧洲科技公司是这么做的

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