26

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

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

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

4

3 回答 3

27

Steve, I had to migrate my old application the way around, that is PgSQL->MySQL. I must say, you should consider yourself lucky ;-) Common gotchas are:

  • SQL is actually pretty close to language standard, so you may suffer from MySQL's dialect you already know
  • MySQL quietly truncates varchars that exceed max length, whereas Pg complains - quick workaround is to have these columns as 'text' instead of 'varchar' and use triggers to truncate long lines
  • double quotes are used instead of reverse apostrophes
  • boolean fields are compared using IS and IS NOT operators, however MySQL-compatible INT(1) with = and <> is still possible
  • there is no REPLACE, use DELETE/INSERT combo
  • Pg is pretty strict on enforcing foreign keys integrity, so don't forget to use ON DELETE CASCADE on references
  • if you use PHP with PDO, remember to pass a parameter to lastInsertId() method - it should be sequence name, which is created usually this way: [tablename]_[primarykeyname]_seq

I hope that helps at least a bit. Have lots of fun playing with Postgres!

于 2008-08-21T15:14:27.840 回答
13

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

以下是困扰我们的事情:

  1. MySQL 不像 PostgreSQL 那样严格地执行约束。
  2. 有不同的日期处理例程。这些将需要手动转换。
  3. 任何不符合 ACID 要求的代码都可能是个问题。

也就是说,一旦它到位并经过测试,它就会好得多。出于安全原因的正确锁定和大量并发使用,PostgreSQL 的性能优于 MySQL。在不需要锁定(只读)的事情上,性能不是很好,但它仍然比网卡快,所以这不是问题。

提示:

  • contrib 目录中的自动化脚本是您转换的一个很好的起点,但通常需要稍微改动一下。
  • 我强烈建议您使用可序列化的隔离级别作为默认值。
  • pg_autodoc 工具非常适合真正查看您的数据结构并帮助找到您忘记定义和强制执行的任何关系。
于 2008-09-16T17:40:37.850 回答
3

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

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

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

于 2008-09-17T17:49:32.377 回答