Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django坚持应用大规模迁移_Python_Django_Postgresql_Psycopg2 - Fatal编程技术网

Python Django坚持应用大规模迁移

Python Django坚持应用大规模迁移,python,django,postgresql,psycopg2,Python,Django,Postgresql,Psycopg2,我在Postgres 9.5中有一个表,大约有7KK行。Django版本是1.10.5。数据库和应用程序是一个本地网络中使用Ubuntu 16.04.2的不同服务器 Django的gunicorn服务器已停止,因此没有其他操作正在执行。我将在那里添加一个字段: migrations.AlterField( model_name='balanceentry', name='reason', field=models.CharF

我在Postgres 9.5中有一个表,大约有7KK行。Django版本是1.10.5。数据库和应用程序是一个本地网络中使用Ubuntu 16.04.2的不同服务器

Django的gunicorn服务器已停止,因此没有其他操作正在执行。我将在那里添加一个字段:

migrations.AlterField(
            model_name='balanceentry',
            name='reason',
            field=models.CharField(
                choices=[(b'default', b'Default'), (b'referral', b'Referral'), (b'referrer', b'Referrer'),
                         (b'random', b'Random'), (b'android_offer', b'Android Offer'), (b'ios_offer', b'iOS Offer'),
                         (b'offerwall', b'Offerwall'), (b'withdrawal', b'Withdrawal')],
                default=b'default', db_index=True, max_length=32),
        ),
然后我应用它:

$ ./manage.py migrate users 0026_auto_20170419_1758
Operations to perform:
  Target specific migration: 0026_auto_20170419_1758, from users
Running migrations:
  Applying users.0026_auto_20170419_1758...
以及用pg_top监控博士后

它在做ALTER大约15分钟,然后我看到:

34567 postgres  20    0  401M   39M sleep   2:17  0.10%  0.00% postgres: *** *** ip(45200) idle in transaction
这在大约10分钟内不会改变(只有WCPU从0%变为约0.1%并返回)

然后这个记录消失了(我想这意味着客户端断开了连接),但是
/manage.py migrate…
根本没有改变它的状态,它只是保持“运行”,没有任何改变(我已经等了大约2个小时)

我尝试重新启动postgres服务,若我这样做,它将回滚事务(我认为),释放一些磁盘空间,但迁移管理命令仍然挂起。它甚至对Ctrl-C都没有反应,我只能用-9杀死它

我还注意到,每次尝试后,大约1-2 GB的可用磁盘空间都会消失


那么,我该如何解决这个问题呢?

我无法发表评论,因为声誉太低,所以必须给出答案

我没有解决办法,但有一个解决办法的想法。您可以键入将显示它执行的SQL的类型,然后向数据库手动运行它。如果成功,您需要在数据库表
django_migrations
中添加一个条目,其中包含迁移名称和迁移应用程序


我不知道这是否可行,但您可能能够找出SQL语句中的错误并对其进行一些优化。

我刚刚考虑过这样的解决方案:)谢谢,我会试试。是的,这很有帮助。谢谢