代码之家  ›  专栏  ›  技术社区  ›  concept47

你们中有多少人从mysql变成了postgresql?值得吗?

  •  11
  • concept47  · 技术社区  · 14 年前

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

    我在寻找个人经验,而不是MySQLv Postgres的枪战,只是你自己的优缺点。人们可能不一定会想到的东西。

    你也可以自由地解释一下为什么你会搬到这里来。

    4 回复  |  直到 14 年前
        1
  •  8
  •   John Topley    14 年前

    我做出了改变,坦率地说,我不能更快乐。虽然Postgres缺少MySQL的一些功能(主要是插入、忽略、替换、向上插入内容和为我加载数据),但它的功能不仅仅是弥补。它的存储过程要强大得多,在Postgres中编写复杂的函数和聚合要容易得多。

    从性能角度来看,如果您将InnoDB与之进行比较(这只是因为MVCC才公平),那么它的速度至少是一样快,甚至可能更快——由于某些限制,我们无法在这里进行一些真正的测量,但肯定没有性能问题。具有多个连接的复杂查询当然更快、更快。

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

    任何语法和类似的差异都是微不足道的。

    总的来说,Postgres对我来说更“成熟”。我使用MySQL很多年了,现在我已经尽力避免了。

        2
  •  5
  •   Ryan Bigg Andrés Bonilla    14 年前

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

    从个人经验来看,我们离开MySQL仅仅是因为我们的生产系统(Heroku)正在运行PostgreSQL。我们为在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
    

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

    PostgreSQL对MySQL的另一个好处是:

    • 全文搜索
    • 地理查询(Postgis)
    • LIKE 语法是这样的 email ~ 'hotmail|gmail' , NOT LIKE 就像 email !~ 'hotmail|gmail' . 这个 | 表示或。

    总之:PostgreSQL就像砖块和灰泥,而MySQL就是乐高。随遇而安。这只是我个人的意见。

        3
  •  1
  •   John P    14 年前

    我们在2007年初(或者是前一年)出于几个原因切换到PostgreSQL。主要原因是:

    • SQL支持-PostgreSQL更适合于复杂的SQL查询,例如具有大量连接和聚合的查询。
    • MySQL的存储过程感觉不是很成熟
    • MySQL许可证变更——双重许可、开源和商业化,这一分割让我对未来产生了疑问。有了PG的BSD许可证,你可以随心所欲。
    • 错误行为——当MySQL计算行数时,有时它只是返回一个近似值,而不是实际计算的行数。
    • 约束的行为有点奇怪,插入截断/调整的值。见 http://use.perl.org/~Smylers/journal/34246
    • 管理界面pgadminiii比mysql更稳定、更成熟。
    • PostgreSQL非常可靠,在断电情况下可确保崩溃安全

    约翰

        4
  •  0
  •   nfm    14 年前

    我自己也没有做过这个转换,但是因为MySQL缺少事务模式更改而被咬了几次,这显然是Postgre所支持的。

    这将解决当您从带有sqlite的dev环境迁移到mysql服务器时遇到的那些棘手问题,并意识到您的迁移失败了,只剩下一半完成了!(不,我没有在生产服务器上执行此操作,但它确实使我们的共享测试服务器变得一团糟!)