PostgreSQL-Fehler: canceling statement due to statement timeout

ERROR:  canceling statement due to statement timeout

Die Anweisung lief länger, als statement_timeout erlaubt, gemessen in Echtzeit ab dem Moment, in dem der Server sie empfing — einschließlich jeder Zeit, die mit Warten auf Locks verbracht wurde. PostgreSQL brach sie ab und rollte ihre Effekte zurück.

Was dieser Fehler bedeutet

SQLSTATE 57014 (query_canceled) deckt alle Anweisungsabbrüche ab; die Meldung sagt Ihnen, welchen Sie erhalten haben:

Die entscheidende Feinheit: statement_timeout zählt auch Lock-Wartezeiten mit. Eine Query, die normalerweise 50 ms dauert, kann in ein 30-s-Timeout laufen, weil sie hinter dem ALTER TABLE von jemandem saß. Bevor Sie die Query "optimieren", finden Sie heraus, in welchem Fall Sie sich befinden.

Häufige Ursachen

So diagnostizieren Sie ihn

-- Woher der aktive Wert kommt:
SELECT name, setting, source
FROM pg_settings
WHERE name = 'statement_timeout';

-- Overrides pro Rolle/Datenbank:
SELECT * FROM pg_db_role_setting;

Die abgebrochene Anweisung wird zusammen mit dem Fehler ins Server-Log geschrieben, sodass Sie genau wissen, um welche Query es sich handelte. Trennen Sie dann die beiden Fälle:

So beheben Sie ihn

🔍 Passendes Tool: der EXPLAIN-ANALYZE-Visualizer — fügen Sie den Plan der Query ein, die ins Timeout lief, und sehen Sie, welcher Knoten die Zeit frisst.
🔍 Weiterführend: Wie man EXPLAIN ANALYZE liest.