Errore PostgreSQL: syntax error at or near
ERROR: syntax error at or near "order"
LINE 1: SELECT * FROM order;
^
Il parser ha incontrato un token che non riusciva a inserire in alcun SQL valido e si è fermato. Un consiglio di lettura cambia tutto: il caret segna dove il parsing si è arreso, che è al punto dell'errore reale o appena dopo — guarda il token segnalato e i pochi prima di esso.
Cosa significa questo errore
Questo è un puro errore di grammatica: lo statement non è mai arrivato a cercare tabelle o colonne. Il token tra virgolette nel messaggio è dove la grammatica si è rotta. Nell'esempio, order è una parola riservata (come in ORDER BY), quindi una tabella con quel nome non può comparire non quotata — il parser lo legge come la keyword e fallisce.
Cause comuni
- Parole riservate come identificatori:
order,group,limit,where… come nomi di tabelle o colonne, non quotati. - Sintassi MySQL: backtick intorno agli identificatori (
`users`),LIMIT 10, 20,AUTO_INCREMENT— tutti errori di sintassi in PostgreSQL. - Punteggiatura mancante o in eccesso: una virgola prima di
FROM, parentesi non bilanciate, una virgola vagante dopo l'ultima colonna. - Placeholder eseguiti letteralmente: eseguire
WHERE id = $1in psql senza fornire parametri. - Virgolette tipografiche incollate da strumenti di chat o documenti:
’e“non sono virgolette SQL.
Come diagnosticarlo
- Leggi il token nell'errore e i pochi token prima del caret — l'errore vive lì.
- Se l'SQL è generato o da template, stampa lo statement finale ed eseguilo in psql; gli errori di sintassi sono molto più facili da vedere nel testo assemblato che nel template.
- Identificatore sospetto? Controlla se è riservato — quotarlo (
"order") come esperimento risolve la questione all'istante.
Come risolverlo
- Parola riservata → quotala (
SELECT * FROM "order") — e valuta di rinominare la tabella; ogni query futura ti ringrazierà. - MySQL-ismi → traduci: doppi apici (o niente) invece dei backtick,
LIMIT 20 OFFSET 10,GENERATED ALWAYS AS IDENTITYinvece diAUTO_INCREMENT. - Virgolette "intelligenti" → ridigita le virgolette in un vero editor.
🔍
Il prossimo errore che incontrerai dopo aver risolto questo: column does not exist — regole di quoting e case per gli identificatori.
