【问题标题】:Unable to apply Django migration in Postgres DB无法在 Postgres DB 中应用 Django 迁移
【发布时间】:2020-07-02 16:21:02
【问题描述】:

在 Django 应用程序中,我使用的是 Postgres DB。 我有两张表,其中一张有 76 百万条记录,另一张有 8.2 百万条记录。

我创建了一个新的迁移文件,在其中我向应用程序中的表添加新列并将默认值设置为 0

我的数据库托管在 Ubuntu EC2 实例 上,该实例的 RAM8 GB

当我尝试使用 python manage.py migrate app_name migration_file_name 应用迁移时,它会抛出以下错误:

文件 "/usr/local/lib/python2.7/site-packages/django/db/backends/utils.py", 第 64 行,在执行中 return self.cursor.execute(sql, params) django.db.utils.OperationalError: SSL SYSCALL error: EOF detected

我已经完成了这个解决方案Postgres SSL SYSCALL error: EOF detected with python and psycopg 但不确定是内存问题还是其他问题。

Python: 2.7.12
Django 1.11.15
Ubuntu: 18.04
Postgres DB: 10.7

还有什么问题?

【问题讨论】:

    标签: python django postgresql amazon-ec2 ubuntu-18.04


    【解决方案1】:

    您的查询可能太大 - 操作太多。这会导致系统内存不足。

    【讨论】:

      【解决方案2】:

      添加具有默认值的新列会触发表重建。为避免大表出现这种情况,您可以在 3 次内创建迁移。

      • 首先,创建一个迁移文件,添加无默认值的 NULLABLE 列。
      • 其次,创建一个空迁移,将这个新的空值填充到所有具有 null=True 的实例的默认值除外
      • 第三,创建一个迁移,定义您的列不能使用默认值为空

      【讨论】:

        猜你喜欢
        • 2016-01-01
        • 2019-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-25
        • 2019-06-23
        • 2019-04-17
        • 2018-01-27
        相关资源
        最近更新 更多