fix(db): check column existence before creating performance indexes
_ensure_indexes() now verifies the target column exists in the table before executing CREATE INDEX IF NOT EXISTS. This prevents failures when migrating legacy database schemas that don't yet have all columns (e.g. files table without created_at or mime_type). Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
+5
-1
@@ -188,10 +188,14 @@ def _ensure_indexes(engine: Any, inspector: Any) -> None:
|
||||
]
|
||||
|
||||
table_names = inspector.get_table_names()
|
||||
columns_by_table: dict[str, set[str]] = {}
|
||||
with engine.begin() as conn:
|
||||
for idx_name, table, column in _PERF_INDEXES:
|
||||
if table in table_names:
|
||||
conn.execute(text(f"CREATE INDEX IF NOT EXISTS {idx_name} ON {table} ({column})"))
|
||||
if table not in columns_by_table:
|
||||
columns_by_table[table] = {col["name"] for col in inspector.get_columns(table)}
|
||||
if column in columns_by_table[table]:
|
||||
conn.execute(text(f"CREATE INDEX IF NOT EXISTS {idx_name} ON {table} ({column})"))
|
||||
|
||||
logger.info("Performance indexes ensured")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user