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:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user