PostgreSQL nimmt keine Befehle mehr an: Wraparound
Die Datenbank verweigert jede schreibende Transaktion. Nicht die Platte ist voll, sondern die Transaktionsnummern gehen aus — Autovacuum kam nicht durch.
// Symptom
Zwischen „kommt gar nicht erst zustande“, „lehnt die Anmeldung ab“, „nimmt keine Schreibvorgänge mehr an“ und „antwortet, aber falsch“ liegen vier völlig verschiedene Ursachen. Die letzte ist die unangenehmste, weil sie keine Fehlermeldung erzeugt: Eine Abfrage findet Zeilen nicht, die es gibt, oder ein Text kommt kürzer zurück, als er hineingegeben wurde. Wer nur nach Abstürzen sucht, findet diese Sorte nie.
Sortiert nach Schadenspotenzial: Was Daten oder Hardware kosten kann, steht oben. Nicht, weil es am wahrscheinlichsten ist – sondern weil es am teuersten wird, wenn man es übersieht.
Die Datenbank verweigert jede schreibende Transaktion. Nicht die Platte ist voll, sondern die Transaktionsnummern gehen aus — Autovacuum kam nicht durch.
Die Sortierbibliothek des Betriebssystems hat sich geändert. PostgreSQL warnt vor einem Versions-Konflikt — Indizes auf Textspalten sind dann unbrauchbar.
SQLITE_CORRUPT (11)SQLite meldet eine beschädigte Datenbankdatei? Erst kopieren, dann prüfen, dann mit .recover retten — und danach die Ursache abstellen.
Die .db-Datei allein ist im WAL-Modus keine vollständige Datenbank. Ohne die -wal-Datei fehlen Transaktionen oder die Kopie ist beschädigt.
WAL verlangt alle Prozesse auf demselben Rechner, weil der wal-index im gemeinsamen Speicher liegt. Über ein Netzdateisystem funktioniert das nicht.
Access denied for userDer Login wird abgewiesen, obwohl das Passwort stimmt? Bei MySQL zählt auch, von welchem Host aus man kommt — der Benutzer ist an eine Herkunft gebunden.
utf8 ist in MySQL nicht UTF-8, sondern utf8mb3 mit höchstens drei Byte pro Zeichen. Emoji brauchen vier — und fallen deshalb hinten runter.
ER_NET_PACKET_TOO_LARGEEin Einspielvorgang bricht ab, weil das Paket größer ist als erlaubt? MySQL kappt die Verbindung — Client und Server brauchen beide mehr Luft.
1298Benannte Zeitzonen funktionieren nur, wenn die Zeitzonentabellen in der mysql-Datenbank gefüllt sind. Frisch installiert sind sie leer.
connection refusedDie App erreicht die Datenbank nicht — Connection refused? Meist lauscht PostgreSQL nur auf localhost oder die Client-Freigabe in pg_hba.conf fehlt.
Der Monatsbericht bricht immer zur gleichen Sekunde ab. Kein Absturz, sondern statement_timeout, pro Rolle oder vom Pool gesetzt, nicht in der conf.
password authentication failed for userPostgreSQL meldet „password authentication failed“? Falsches Passwort, falscher Nutzer oder pg_hba.conf erlaubt die Methode nicht. So kommst du rein.
Verbindungen stehen stundenlang auf idle in transaction, Sperren bleiben, VACUUM kommt nicht hinterher. Der Timeout dafür steht ab Werk auf null.
sorry, too many clients alreadyDie Datenbank weist neue Verbindungen ab? Das Verbindungslimit ist erreicht — meist, weil eine App Verbindungen nicht schließt oder ein Pool fehlt.
work_mem gilt nicht je Abfrage, sondern je Sortier- oder Hash-Operation; Hash-Tabellen dürfen ab Werk das Doppelte. Gesamt: ein Vielfaches.
database is lockedSQLite meldet „database is locked“? Sie erlaubt nur einen Schreiber — ein hängender Zugriff oder ein Netzlaufwerk bringt sie ins Stocken.
Die Spalte heißt INTEGER, enthält aber „42“ als Zeichenkette. SQLite bindet den Datentyp an den Wert, nicht an die Spalte — und meckert nicht.