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

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

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

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

【问题讨论】:

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

标签: mysql database postgresql licensing migration


【解决方案1】:

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

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

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

【讨论】:

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

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

以下是困扰我们的事情:

  1. MySQL 不强制执行约束 与 PostgreSQL 一样严格。
  2. 有不同的日期处理例程。这些将需要手动转换。
  3. 任何不需要 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 玩得开心!

    【讨论】:

      猜你喜欢
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      • 2011-06-13
      相关资源
      最近更新 更多