从MySQL迁移到PostgreSQL
我们目前正在使用MySQL作为我们正在构建的产品,并且希望尽快迁移到PostgreSQL,主要用于授权原因。从MySQL迁移到PostgreSQL
有没有其他人做过这样的举动?我们的数据库是应用程序的命脉,最终会存储TB数据,所以我很想听听性能改进/丢失的经验,转换SQL和存储过程的主要障碍等。
编辑:Just向那些问我们为什么不喜欢MySQL许可的人士澄清。我们正在开发一种商业产品(目前)依赖MySQL作为数据库后端。他们的许可证状态我们需要向他们支付我们每次安装的清单价格的百分比,而不是固定费用。作为一家创业公司,这不如吸引人。
史蒂夫,我不得不迁移我的旧应用程序,即PgSQL-> MySQL。我必须说,你应该考虑自己是幸运的;-) 常见的问题有:
- SQL实际上是非常接近的语言标准,所以你可以从MySQL的方言遭受你已经知道
- MySQL的悄然截断VARCHAR处理该超过最大长度,而Pg抱怨 - 快速解决方法是将这些列作为'文本'而不是'varchar'并使用触发器来截断长行
- 使用双引号代替反撇号
- 使用布尔字段进行比较IS和IS不是运算符,但是与MySQL兼容的INT(1)使用=和<>仍然是可能的
- 有没有更换,使用DELETE/INSERT组合
- PG是强制执行外键的完整性相当严格,所以不要忘记在引用ON DELETE CASCADE使用
- 如果您使用PHP与PDO,记得一个参数传递给lastInsertId()方法 - 它应该是序列的名字,这是创建通常是这样的:[表名] _ [primarykeyname] _seq
我希望帮助至少一点。和Postgres玩得很开心!
我做了类似的转换,但出于不同的原因。这是因为我们需要更好的ACID支持,并且能够让网络用户通过其他数据库工具查看相同的数据(两者都有一个ID)。
这里有一点我们的事:
- MySQL不会强制约束 作为严格的PostgreSQL的。
- 有不同的日期处理例程。这些将需要手动转换。
- 任何不符合ACID 规范的代码都可能是一个问题。
这就是说,一旦它到位并经过测试,就会更好。出于安全原因和繁重的并发使用,正确锁定后,PostgreSQL表现比MySQL好。在不需要锁定的情况下(只读),性能不太好,但仍然比网卡要快,所以这不是问题。
提示:
- 的自动化脚本在contrib 目录是转换一个很好的起点 ,但需要 ,通常可触及一点点。
- 我强烈建议您将 作为默认值使用可序列化的隔离级别 级别。
- pg_autodoc工具很好, 真的看到你的数据结构和 帮助找到你忘记定义和强制执行的任何关系 。
我们从MySQL3迁移到PostgreSQL 8.2,然后是8.3。 PostgreSQL具有SQL的基础,还有更多,所以如果你的MYSQL不使用花哨的MySQL的东西,你会没事的。
根据我的经验,我们的MySQL数据库(版本3)没有外键...... PostgreSQL让你拥有它们,所以我们必须改变这个......这是一件好事,我们发现了一些错误。
我们不得不改变的另一件事是编码(C#)连接器在MySQL中不一样。 MySQL之一比PostgreSQL更稳定。我们在PostgreSQL上仍然有一些问题。
关于这个问题有一些很好的技术文章在这里:http://wiki.postgresql.org/wiki/Converting_from_other_Databases_to_PostgreSQL – user13550 2008-09-16 20:39:06
复制也许是一个问题你。 MySQL支持它开箱即用。 – 2008-09-17 17:45:06