从 MySQL 迁移到 PostgreSQL 时,Django 用户应该知道啥?

Posted

技术标签:

【中文标题】从 MySQL 迁移到 PostgreSQL 时,Django 用户应该知道啥?【英文标题】:What should a Django user know when moving from MySQL to PostgreSQL?从 MySQL 迁移到 PostgreSQL 时,Django 用户应该知道什么? 【发布时间】:2011-02-06 13:06:12 【问题描述】:

到目前为止,我使用 Django 的大部分经验都是使用 mysql 和 mysqldb。对于我正在编写的一个新应用程序,我正在将脚趾浸入 PostgreSQL 水中,现在我有了seen the light。

在编写数据导入脚本时,我偶然发现了默认自动提交行为的问题。我猜可能还会出现其他“陷阱”。我还应该注意什么?

【问题讨论】:

感谢您提出这个问题 - 我正在考虑迁移到 PostgreSQL,并且也会遇到任何这些问题,但不知道它们是什么。 【参考方案1】:

Django 的自动提交和默认的 PostgreSQL 提交模式不一致。

开箱即用,Django 使用默认的 PostgreSQL 模式“已提交”,它将所有操作组合成一个事务,当 db 游标超出范围时结束。当这一系列操作期间发生错误时,就会出现问题。 Postgres 希望您在继续之前发出回滚,如果您不这样做,psycopg2 会在您下次使用连接时抛出 InternalError。如果您依赖 Django 自动提交(默认),您可能无法正确回滚。

幸运的是,psycopg2 支持另一种称为“自动提交”的操作模式,其中它不会设置这些事务。对于那些来自 MySQL(或试图同时支持两者)的人来说,这给世界带来了一些理智。在 1.1 中,他们增加了对公开它的支持。将以下内容添加到您的设置中(如果您在中继上,则需要更改 1.2 syntax)

DATABASE_OPTIONS = 
    "autocommit": True,

关于 Django 票 #3460 的讨论列出了具体细节。


【讨论】:

以上是关于从 MySQL 迁移到 PostgreSQL 时,Django 用户应该知道啥?的主要内容,如果未能解决你的问题,请参考以下文章

从 MySQL 迁移到 PostgreSQL [关闭]

从 MySQL 迁移到 PostgreSQL 后类似查询的 SQL 性能问题

从 MSSQL 迁移到 postgresql 或 mysql [关闭]

AskTUG 论坛迁移实战:Discourse 从 PostgreSQL 到 MySQL 到 TiDB | 极客分享第 36 期

两年内从MySQL迁移到PostgreSQL?这家欧洲科技公司是这么做的

在 Linux (Kubuntu) 上从 MySQL 迁移到 PostgreSQL