Konfiguration
# policy.yaml
transactions:
# Transaktionsbefehle erlauben
enabled: true
# Maximale Transaktionsdauer (verhindert lang laufende Sperren)
max_duration: 30s
# Maximale Statements pro Transaktion
max_statements: 100
# Erlaubte Isolationsstufen
allowed_isolation_levels:
- "read committed"
- "repeatable read"
# serializable wegen Performance deaktiviert
# Savepoints
allow_savepoints: true
TXN-001PASS
Transaktionsblock erlaubt
Gültige Transaktion
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = $1;
UPDATE accounts SET balance = balance + 100 WHERE id = $2;
COMMIT;
Erwartetes Ergebnis
BEGIN
UPDATE 1
UPDATE 1
COMMIT
Transaktionsbefehle (BEGIN, COMMIT, ROLLBACK) sind erlaubt. Jedes Statement innerhalb der Transaktion wird gegen die Whitelist validiert.
TXN-002BLOCKED
Lang laufende Transaktion - Timeout
Nach 30 Sekunden
ERROR: Transaktions-Timeout
DETAIL: Transaktion hat die maximale Dauer von 30 Sekunden überschritten.
HINT: Transaktion wurde automatisch zurückgerollt. Teilen Sie große Operationen in kleinere Batches auf.
Transaktionen, die das konfigurierte Timeout überschreiten, werden automatisch zurückgerollt, um Ressourcenerschöpfung und Lock-Konflikte zu verhindern.
TXN-003PASS
Savepoint-Unterstützung
Savepoints für partielles Rollback
BEGIN;
INSERT INTO orders (user_id, total) VALUES ($1, $2);
SAVEPOINT before_items;
INSERT INTO order_items (order_id, product_id) VALUES ($3, $4);
-- Falls Item-Insert fehlschlägt:
ROLLBACK TO SAVEPOINT before_items;
COMMIT;
Savepoints ermöglichen partielles Rollback innerhalb einer Transaktion. Nützlich für optionale Operationen, die fehlschlagen können.
TXN-004BLOCKED
Nicht erlaubte Isolationsstufe
Versuch
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Erwartete Antwort
ERROR: Isolationsstufe nicht erlaubt
DETAIL: SERIALIZABLE ist in der Policy deaktiviert.
HINT: Verwenden Sie stattdessen READ COMMITTED oder REPEATABLE READ.
Das ALG erzwingt erlaubte Isolationsstufen, um Performance-Probleme durch zu strikte Isolation zu verhindern.
TXN-005BLOCKED
Transaktions-Statement-Limit
Transaktionen mit mehr als max_statements werden blockiert, um unkontrollierte Batch-Operationen zu verhindern, die Ressourcen verbrauchen.