Erreur PostgreSQL : syntax error at or near
ERROR: syntax error at or near "order"
LINE 1: SELECT * FROM order;
^
Le parseur a rencontré un token qu'il ne pouvait faire entrer dans aucun SQL valide et s'est arrêté. Une astuce de lecture change tout : le caret marque là où l'analyse a abandonné, ce qui est sur ou juste après l'erreur réelle — regardez le token signalé et les quelques-uns d'avant.
Ce que signifie cette erreur
C'est une pure erreur de grammaire : l'instruction n'est jamais allée jusqu'à chercher tables ou colonnes. Le token entre guillemets dans le message est là où la grammaire a cassé. Dans l'exemple, order est un mot réservé (comme dans ORDER BY), donc une table portant ce nom ne peut pas apparaître sans guillemets — le parseur le lit comme le mot-clé et échoue.
Causes fréquentes
- Mots réservés comme identifiants :
order,group,limit,where… comme noms de table ou de colonne, sans guillemets. - Syntaxe MySQL : apostrophes inverses autour des identifiants (
`users`),LIMIT 10, 20,AUTO_INCREMENT— toutes des erreurs de syntaxe dans PostgreSQL. - Ponctuation manquante ou en trop : une virgule avant
FROM, des parenthèses déséquilibrées, une virgule égarée après la dernière colonne. - Placeholders exécutés littéralement : exécuter
WHERE id = $1dans psql sans fournir de paramètres. - Guillemets typographiques collés depuis des outils de discussion ou des documents :
’et“ne sont pas des guillemets SQL.
Comment la diagnostiquer
- Lisez le token de l'erreur et les quelques tokens avant le caret — l'erreur est là.
- Si le SQL est généré ou basé sur un template, affichez l'instruction finale et exécutez-la dans psql ; les erreurs de syntaxe sont bien plus faciles à voir dans le texte assemblé que dans le template.
- Identifiant suspect ? Vérifiez s'il est réservé — le mettre entre guillemets (
"order") à titre d'expérience tranche instantanément.
Comment la corriger
- Mot réservé → mettez-le entre guillemets (
SELECT * FROM "order") — et envisagez de renommer la table ; toute requête future vous en remerciera. - MySQL-ismes → traduisez : guillemets doubles (ou rien) au lieu des apostrophes inverses,
LIMIT 20 OFFSET 10,GENERATED ALWAYS AS IDENTITYau lieu d'AUTO_INCREMENT. - Guillemets « intelligents » → retapez les guillemets dans un vrai éditeur.
🔍
L'erreur suivante que vous rencontrerez après avoir corrigé celle-ci : column does not exist — règles de guillemets et de casse pour les identifiants.
