从MySQL迁移到PostgreSQL

时间:2008-08-20 10:40:39

标签: mysql database postgresql licensing migration

我们目前正在使用MySQL来开发我们正在构建的产品,并且希望尽快转移到PostgreSQL,主要是出于许可的原因。

还有其他人做过这样的举动吗?我们的数据库是应用程序的生命线,最终将存储TB数据,所以我很想知道性能改进/丢失的经验,转换SQL和存储过程的主要障碍等等。

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

3 个答案:

答案 0 :(得分:27)

史蒂夫,我不得不一路迁移我的旧应用程序,即PgSQL-> MySQL。我必须说,你应该认为自己很幸运;-) 常见的问题是:

  • SQL实际上非常接近语言标准,所以你可能会遇到你已经知道的MySQL方言
  • MySQL悄悄地截断超过最大长度的varchars,而Pg抱怨 - 快速解决方法是将这些列设置为'text'而不是'varchar'并使用触发器截断长行
  • 使用双引号代替反向撇号
  • 使用IS和IS NOT运算符比较布尔字段,但是MySQL兼容的INT(1)与=和<>仍然可能
  • 没有REPLACE,使用DELETE / INSERT组合
  • Pg对强制执行外键完整性非常严格,所以不要忘记在引用上使用ON DELETE CASCADE
  • 如果您将PHP与PDO一起使用,请记住将参数传递给lastInsertId()方法 - 它应该是序列名称,通常以这种方式创建:[tablename] _ [primarykeyname] _seq

我希望至少有一点帮助。和Postgres一起玩很开心!

答案 1 :(得分:13)

我做了类似的转换,但出于不同的原因。这是因为我们需要更好的ACID支持,并且能够让网络用户通过其他数据库工具看到相同的数据(两者都有一个ID)。

以下是让我们感到困惑的事情:

  1. MySQL不强制执行约束 和PostgreSQL一样严格。
  2. 有不同的日期处理程序。这些将需要手动转换。
  3. 任何不期望ACID的代码 合规可能是一个问题。
  4. 那说,一旦它到位并经过测试,它就会好得多。出于安全原因和大量并发使用而正确锁定,PostgreSQL的性能优于MySQL。关于不需要锁定的东西(只读),性能不是很好,但它仍然比网卡快,所以这不是问题。

    提示:

    • contrib中的自动脚本 目录是一个很好的起点 为了你的转换,但需要 通常会有点感动。
    • 我强烈推荐你 使用可序列化隔离 水平作为默认值。
    • pg_autodoc工具很适合 真的看到你的数据结构和 帮助找到你的任何关系 忘了定义和执行。

答案 2 :(得分:3)

我们从MySQL3迁移到PostgreSQL 8.2然后是8.3。 PostgreSQL具有基本的SQL和更多,所以如果你的MYSQL不使用花哨的MySQL东西,你就可以了。

根据我的经验,我们的MySQL数据库(版本3)没有外键... PostgreSQL让你拥有它们,所以我们不得不改变它...这是一件好事,我们发现了一些错误。

我们不得不改变的另一件事是编码(C#)连接器在MySQL中不一样。 MySQL一个比PostgreSQL更稳定。我们对PostgreSQL的问题仍然很少。