Migration-Bugfix: DDL statementweise statt als Multi-Statement-Block ausführen
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:
2026-09-03 23:06:44 +02:00
co-authored by Claude Sonnet 5
parent b5c46cf648
commit 035b22fd1e
2 changed files with 26 additions and 2 deletions
+12
View File
@@ -1107,3 +1107,15 @@ Keine Commits in dieser Session.
- backend/tests/test_roles.py | 28 +++++++ - backend/tests/test_roles.py | 28 +++++++
--- ---
## 2026-09-03 22:55 23:04 (9m)
**Beschreibung:** Claude Code Session
**Projekt:** asb-material
### Commits
- b5c46cf Installer-Bugfix: sudo-Abhängigkeit entfernt, SQL-Ausführung über stdin statt su-Argument
- 446e4f9 Deployment-Setup (PostgreSQL+nginx-Installer) + Sprint-0-Fixes aus Subagenten-Reviews
### Geänderte Dateien
- deploy/install_server.sh | 21 +++++++++++++++------
---
@@ -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: def upgrade() -> None:
op.execute(UPGRADE_SQL) _execute_statements(UPGRADE_SQL)
def downgrade() -> None: def downgrade() -> None:
op.execute(DOWNGRADE_SQL) _execute_statements(DOWNGRADE_SQL)