From 964401944fce0a197c1ae98c3292be4d0755403e Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 4 Mar 2026 16:47:36 +0800 Subject: [PATCH] perf: update pg migrations for refresh collation version --- .../0003_refresh_pg_collation_version.py | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/apps/settings/migrations/0003_refresh_pg_collation_version.py b/apps/settings/migrations/0003_refresh_pg_collation_version.py index fa79fb33c..172f3c2ef 100644 --- a/apps/settings/migrations/0003_refresh_pg_collation_version.py +++ b/apps/settings/migrations/0003_refresh_pg_collation_version.py @@ -5,12 +5,23 @@ from django.db import migrations, connections def refresh_pg_collation(apps, schema_editor): for alias, conn in connections.databases.items(): - if connections[alias].vendor == "postgresql": - dbname = connections[alias].settings_dict["NAME"] - connections[alias].cursor().execute( - f'ALTER DATABASE "{dbname}" REFRESH COLLATION VERSION;' - ) - print(f"Refreshed postgresql collation version for database: {dbname} successfully.") + connection = connections[alias] + if connection.vendor == "postgresql": + # REFRESH COLLATION VERSION is supported on PostgreSQL 15+ + try: + pg_version = getattr(connection, "pg_version", None) + except Exception: + pg_version = None + + if pg_version and pg_version >= 150000: + dbname = connection.settings_dict["NAME"] + with connection.cursor() as cursor: + cursor.execute( + f'ALTER DATABASE "{dbname}" REFRESH COLLATION VERSION;' + ) + print( + f"Refreshed postgresql collation version for database: {dbname} successfully." + ) class Migration(migrations.Migration):