From 9461ca8071a95d523d9941b3ff635f1ba94efae1 Mon Sep 17 00:00:00 2001 From: CaptainB Date: Tue, 19 Aug 2025 13:44:10 +0800 Subject: [PATCH] feat: add migration to refresh collation and reindex database --- .../0002_refresh_collation_reindex.py | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 apps/system_manage/migrations/0002_refresh_collation_reindex.py diff --git a/apps/system_manage/migrations/0002_refresh_collation_reindex.py b/apps/system_manage/migrations/0002_refresh_collation_reindex.py new file mode 100644 index 000000000..b28f800d0 --- /dev/null +++ b/apps/system_manage/migrations/0002_refresh_collation_reindex.py @@ -0,0 +1,26 @@ +from django.db import migrations + + +def refresh_collation_and_reindex(apps, schema_editor): + # 获取当前数据库名 + db_name = schema_editor.connection.settings_dict["NAME"] + with schema_editor.connection.cursor() as cursor: + cursor.execute(f'ALTER DATABASE "{db_name}" REFRESH COLLATION VERSION;') + cursor.execute(f'REINDEX DATABASE "{db_name}";') + + +def noop(apps, schema_editor): + # 不可逆操作,留空 + pass + + +class Migration(migrations.Migration): + atomic = False # ALTER DATABASE/REINDEX 需在事务外执行 + + dependencies = [ + ("system_manage", "0001_initial"), + ] + + operations = [ + migrations.RunPython(refresh_collation_and_reindex, reverse_code=noop), + ] \ No newline at end of file