From 64f0f2460ad8b74931699860794194ec5ee32728 Mon Sep 17 00:00:00 2001 From: ievgenii vdovenko Date: Tue, 22 Jul 2025 11:43:39 +0200 Subject: [PATCH] feature: adds validation that column does not exist before adding it --- .../dbmigrate/versions/116_version_5_7_0.py | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/rhodecode/lib/dbmigrate/versions/116_version_5_7_0.py b/rhodecode/lib/dbmigrate/versions/116_version_5_7_0.py index bd0389b3..b2dfb252 100644 --- a/rhodecode/lib/dbmigrate/versions/116_version_5_7_0.py +++ b/rhodecode/lib/dbmigrate/versions/116_version_5_7_0.py @@ -1,5 +1,7 @@ import json import logging + +from psycopg2.errorcodes import DUPLICATE_COLUMN from sqlalchemy import * from sqlalchemy.engine import reflection @@ -24,18 +26,22 @@ def upgrade(migrate_engine): context = MigrationContext.configure(migrate_engine.connect()) op = Operations(context) + inspector = inspect(migrate_engine) pr_tables = [db.PullRequest.__table__, db.PullRequestVersion.__table__] for pr_table in pr_tables: - with op.batch_alter_table(pr_table.name) as batch_op: - new_column = Column( - "settings_json", - MutationObj.as_mutable( - JsonType(dialect_map=dict(mysql=UnicodeText(16384))), - ), - default=dict, - ) - batch_op.add_column(new_column) + existing_columns = [col["name"] for col in inspector.get_columns(pr_table.name)] + new_column_name = "settings_json" + if new_column_name not in existing_columns: + with op.batch_alter_table(pr_table.name) as batch_op: + new_column = Column( + new_column_name, + MutationObj.as_mutable( + JsonType(dialect_map=dict(mysql=UnicodeText(16384))), + ), + default=dict, + ) + batch_op.add_column(new_column) _inherit_settings(db, meta.Session, op)