Migration-Bugfix: DDL statementweise statt als Multi-Statement-Block ausführen
CI / backend-tests (push) Failing after 1s
CI / backend-tests (push) Failing after 1s
asyncpg (SQLAlchemy async) lässt keine Mehrfach-Statements in einem prepared statement zu - "cannot insert multiple commands into a prepared statement". Aufgetreten beim ersten echten alembic upgrade head auf dem Zielserver. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L85hmKbvX7Cqkq47KnQhFt
This commit is contained in:
@@ -283,9 +283,21 @@ DROP TYPE IF EXISTS materialtyp;
|
||||
"""
|
||||
|
||||
|
||||
def _execute_statements(sql: str) -> None:
|
||||
# asyncpg lässt keine Mehrfach-Statements in einem prepared statement zu
|
||||
# (Fund beim ersten realen `alembic upgrade head` gegen asyncpg) – jedes
|
||||
# ";"-getrennte Statement einzeln ausführen. Kein Statement in diesem
|
||||
# Schema enthält ein Semikolon innerhalb eines String-/Kommentarwerts,
|
||||
# daher ist ein simpler Split sicher.
|
||||
for statement in sql.split(";"):
|
||||
statement = statement.strip()
|
||||
if statement:
|
||||
op.execute(statement)
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
op.execute(UPGRADE_SQL)
|
||||
_execute_statements(UPGRADE_SQL)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
op.execute(DOWNGRADE_SQL)
|
||||
_execute_statements(DOWNGRADE_SQL)
|
||||
|
||||
Reference in New Issue
Block a user