首页 > 解决方案 > 撤消查询的反向sql

问题描述

询问:

UPDATE "table_name"
SET properties = properties || jsonb_build_object('$ip', ip)
WHERE ip IS NOT NULL;

我正在运行 Django 迁移,我需要撤消执行此查询的结果并将表恢复到以前状态的反向 sql。

因为当我为以下操作运行 django 迁移测试时:

operations = [
        # migrations.RunPython(migrate_event_ip_to_property, rollback),
        migrations.RunSQL(
            """
            UPDATE "table_name"
            SET properties = properties || jsonb_build_object('$ip', ip)
            WHERE ip IS NOT NULL;
            """,
            None
        )
    ]

我得到不可逆错误。我想如果我提供反向sql,而不是None,它可能会起作用

标签: postgresqldjango-migrations

解决方案


我认为你不走运从 postgresql 寻找原始解决方案,因为 SQL 事务已经由 Django 迁移提交。请参阅Postgresql 回滚

但在这种情况下,您可以使用以下方法恢复到上次工作迁移:

./manage.py migrate app XXXX_last_working_migration

如 Django的django-admin 文档迁移部分所述


推荐阅读