问题 你们有多少人从MySQL到Postgresql?它值得吗?


我正在考虑从MySQL迁移到Postgres进行Rails开发,我只是想听听其他开发人员所做的事情。

我正在寻找个人经历,而不是Mysql v Postgres枪战,只是你自己所获得的利弊。人们可能不一定会想到的东西。

随意解释你为什么一开始就搬家了。


8231
2018-06-03 07:57


起源

应该是社区维基 - 这个没有一个正确的答案。 - Pär Wieslander
更不用说存在无数类似问题了。 - Milen A. Radev
正如我所问的那样,正确的答案将提供有关从mysql迁移到postgres的最详细和最深入的帖子。与其他帖子不同,这里的问题特别涉及Rails开发。 - concept47


答案:


我做了转换,坦率地说,不能更开心。虽然Postgres缺少MySQL的一些东西(主要是插入忽略,替换,Upsert和加载数据Infile),但它确实具有的功能不仅仅是弥补。它的存储过程功能更强大,在Postgres中编写复杂的函数和聚合要容易得多。

性能方面,如果你比较InnoDB(由于MVCC这是公平的),那么它感觉至少同样快,可能更快 - 由于某些限制,我们无法在这里做一些真正的测量,但那里当然不是性能问题。具有多个连接的复杂查询肯定更快,更快。

我发现你更有可能从Postgres社区得到你问题的正确答案。每个人和他们的祖母都有50种不同的方式在MySQL中做某事。使用Postgres,点击邮件列表,你可能会得到很多非常好的帮助。

任何语法等差异都有点微不足道。

总的来说,Postgres对我来说感觉更“成熟”。我使用MySQL多年了,现在我不顾一切地避开它。


8
2018-06-03 13:13



不能同意更多。我的祖母总是困扰我的新破解方案,以解决MySQL中缺乏工作检查限制的问题。 - Ian Mackinnon


亲爱的,这可能会以泪水结束。

仅从个人经验来看,我们仅仅因为我们的生产系统(Heroku)正在运行PostgreSQL而从MySQL迁移。我们为PostgreSQL打破了定制的MySQL查询。所以我想这里的故事的士气是在同一个DBMS上运行,否则你可能会遇到问题。

我们有时也需要插入快速的记录。为此,我们使用PostgreSQL的内置功能 COPY 函数,在我们的应用程序中与此类似使用:

query = "COPY users(email) FROM STDIN WITH CSV"
values = users.map! do |user|
  # Be wary of the types of the objects here, they matter.
  # For instance if you set the id to a string it will error.

  %Q{#{user["email"]}}
end.join("\n")

raw_connection.exec(query)
raw_connection.put_copy_data(values)
raw_connection.put_copy_end

这将在不到两分钟的时间内将~500,000条记录插入到数据库中。大约在同一时间,如果我们添加更多字段。

PostgreSQL对MySQL的另一个好处:

  • 全文检索
  • 地理查询(PostGIS)
  • LIKE 语法是这样的 email ~ 'hotmail|gmail'NOT LIKE 就好像 email !~ 'hotmail|gmail'。该 | 表示或。

总结一下:PostgreSQL就像砖块,其中MySQL是Lego。选择适合自己的“感觉”。这只是我个人的意见。


5
2018-06-03 08:40



~ 和 !~ 是正则表达式运算符。 ~~ 是LIKE的快捷方式。更多细节在 postgresql.org/docs/8.4/static/functions-matching.html  使用raw_connection来调用 COPY 是一个方便的技巧。 - Jason Weathered
我相信你也可以在MySQL中进行全文搜索? - Joshua Partogi


我们在2007年初转为PostgreSQL有几个原因(或者是前一年?)。主要原因是:

  • SQL支持 - PostgreSQL对复杂的SQL查询要好得多,例如有很多连接和聚合
  • MySQL的存储过程并不十分成熟
  • MySQL许可证更改 - 双重许可,开源和商业,分裂使我对未来感到好奇。有了PG的BSD许可证,您可以随心所欲。
  • 错误的行为 - 当MySQL计算行时,有时它只返回一个近似值,而不是实际计算的行。
  • 约束表现有点奇怪,插入截断/适应值。看到 http://use.perl.org/~Smylers/journal/34246
  • 管理界面PgAdminIII感觉比MySQL对应的更稳定和成熟
  • PostgreSQL非常稳固,在发生中断时可以安全运行

// 约翰


1
2018-06-21 04:34





没有自己做过切换,但是由于MySQL缺乏显然Postgre支持的事务架构变化而被咬了几次。

这将解决当您从具有sqlite的开发环境迁移到MySQL服务器并且意识到您的迁移被搞砸并且完成了一半时所遇到的那些令人讨厌的问题! (不,我没有在生产服务器上这样做,但它确实弄乱了我们的共享测试服务器!)


0
2018-06-03 10:27