PostgreSQL-Fehler: syntax error at or near
ERROR: syntax error at or near "order"
LINE 1: SELECT * FROM order;
^
Der Parser stieß auf ein Token, das er in kein gültiges SQL einordnen konnte, und stoppte. Ein Lesetipp ändert alles: das ^ markiert, wo das Parsen aufgab, was an oder kurz nach dem eigentlichen Fehler liegt — schauen Sie auf das markierte Token und die wenigen davor.
Was dieser Fehler bedeutet
Dies ist ein reiner Grammatikfehler: die Anweisung kam nie so weit, Tabellen oder Spalten nachzuschlagen. Das gequotete Token in der Meldung ist der Ort, an dem die Grammatik brach. Im Beispiel ist order ein reserviertes Wort (wie in ORDER BY), sodass eine Tabelle dieses Namens nicht ungequotet erscheinen kann — der Parser liest es als das Schlüsselwort und scheitert.
Häufige Ursachen
- Reservierte Wörter als Bezeichner:
order,group,limit,where… als Tabellen- oder Spaltennamen, ungequotet. - MySQL-Syntax: Backticks um Bezeichner (
`users`),LIMIT 10, 20,AUTO_INCREMENT— alles Syntaxfehler in PostgreSQL. - Fehlende oder überzählige Interpunktion: ein Komma vor
FROM, unausgeglichene Klammern, ein verirrtes Komma nach der letzten Spalte. - Platzhalter buchstäblich ausgeführt:
WHERE id = $1in psql ohne Bereitstellung von Parametern ausführen. - Typografische Anführungszeichen, aus Chat-Tools oder Dokumenten eingefügt:
’und“sind keine SQL-Anführungszeichen.
So diagnostizieren Sie ihn
- Lesen Sie das Token im Fehler und die wenigen Tokens vor dem ^ — dort lebt der Fehler.
- Wenn das SQL erzeugt oder aus Templates gebaut ist, drucken Sie die finale Anweisung und führen Sie sie in psql aus; Syntaxfehler sind im zusammengesetzten Text viel leichter zu sehen als im Template.
- Verdächtiger Bezeichner? Prüfen Sie, ob er reserviert ist — ihn testweise zu quoten (
"order") klärt es sofort.
So beheben Sie ihn
- Reserviertes Wort → quoten Sie es (
SELECT * FROM "order") — und erwägen Sie, die Tabelle umzubenennen; jede zukünftige Query wird es Ihnen danken. - MySQL-Ismen → übersetzen: doppelte Anführungszeichen (oder nichts) statt Backticks,
LIMIT 20 OFFSET 10,GENERATED ALWAYS AS IDENTITYstattAUTO_INCREMENT. - Typografische Anführungszeichen → tippen Sie die Anführungszeichen in einem echten Editor neu.
🔍
Der nächste Fehler, dem Sie nach dem Beheben dieses begegnen: column does not exist — Quoting- und Groß-/Kleinschreibungsregeln für Bezeichner.
