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

时间:2010-06-03 07:57:14

标签: mysql ruby-on-rails postgresql

我正在考虑从MySQL迁移到Postgres进行Rails开发,我只是想听听其他开发人员对此有何看法。

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

随意解释你为什么一开始就感动。

4 个答案:

答案 0 :(得分:8)

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

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

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

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

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

答案 1 :(得分:5)

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

仅从个人经验来看,我们仅仅因为我们的生产系统(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 LIKEemail !~ 'hotmail|gmail'类似。 |表示或。

总结:PostgreSQL就像砖块一样。迫击炮,MySQL是乐高。选择适合自己的“感觉”。这只是我个人的意见。

答案 2 :(得分:1)

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

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

//约翰

答案 3 :(得分:0)

我自己没有做过这个开关,但是由于MySQL没有显示Postgre支持的事务架构变化而被咬了几次。

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