From 40ebccf3c50ba0849e7f899e5805965e010f1120 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B1=9F=E6=B3=A2?= Date: Wed, 15 Jan 2025 21:36:50 +0800 Subject: [PATCH] fix: ignore tables like embedding_vector_index_***_nod when migrate --- api/migrations/env.py | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/api/migrations/env.py b/api/migrations/env.py index ad3a122c04bc2d..a444633249be03 100644 --- a/api/migrations/env.py +++ b/api/migrations/env.py @@ -1,4 +1,5 @@ import logging +import re from logging.config import fileConfig from alembic import context @@ -11,27 +12,26 @@ # Interpret the config file for Python logging. # This line sets up loggers basically. fileConfig(config.config_file_name) -logger = logging.getLogger('alembic.env') +logger = logging.getLogger("alembic.env") def get_engine(): - return current_app.extensions['migrate'].db.engine + return current_app.extensions["migrate"].db.engine def get_engine_url(): try: - return get_engine().url.render_as_string(hide_password=False).replace( - '%', '%%') + return get_engine().url.render_as_string(hide_password=False).replace("%", "%%") except AttributeError: - return str(get_engine().url).replace('%', '%%') + return str(get_engine().url).replace("%", "%%") # add your model's MetaData object here # for 'autogenerate' support # from myapp import mymodel # target_metadata = mymodel.Base.metadata -config.set_main_option('sqlalchemy.url', get_engine_url()) -target_db = current_app.extensions['migrate'].db +config.set_main_option("sqlalchemy.url", get_engine_url()) +target_db = current_app.extensions["migrate"].db # other values from the config, defined by the needs of env.py, # can be acquired: @@ -40,7 +40,7 @@ def get_engine_url(): def get_metadata(): - if hasattr(target_db, 'metadatas'): + if hasattr(target_db, "metadatas"): return target_db.metadatas[None] return target_db.metadata @@ -48,6 +48,11 @@ def get_metadata(): def include_object(object, name, type_, reflected, compare_to): if type_ == "foreign_key_constraint": return False + elif type_ == "table": + if re.match(r"^embedding_vector_index_.*?_nod$", name): + return False + else: + return True else: return True @@ -65,9 +70,7 @@ def run_migrations_offline(): """ url = config.get_main_option("sqlalchemy.url") - context.configure( - url=url, target_metadata=get_metadata(), literal_binds=True - ) + context.configure(url=url, target_metadata=get_metadata(), literal_binds=True) with context.begin_transaction(): context.run_migrations() @@ -85,11 +88,11 @@ def run_migrations_online(): # when there are no changes to the schema # reference: http://alembic.zzzcomputing.com/en/latest/cookbook.html def process_revision_directives(context, revision, directives): - if getattr(config.cmd_opts, 'autogenerate', False): + if getattr(config.cmd_opts, "autogenerate", False): script = directives[0] if script.upgrade_ops.is_empty(): directives[:] = [] - logger.info('No changes in schema detected.') + logger.info("No changes in schema detected.") connectable = get_engine() @@ -99,7 +102,7 @@ def process_revision_directives(context, revision, directives): target_metadata=get_metadata(), process_revision_directives=process_revision_directives, include_object=include_object, - **current_app.extensions['migrate'].configure_args + **current_app.extensions["migrate"].configure_args, ) with context.begin_transaction(): @@ -110,4 +113,3 @@ def process_revision_directives(context, revision, directives): run_migrations_offline() else: run_migrations_online() -