PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

L'ID della colonna di Doctrine non esiste su PostgreSQL

user è una parola riservata . È un alias per current_user .

regress=> SELECT * FROM user;
 current_user 
--------------
 myusername
(1 row)

Se vuoi usare user come nome di una tabella, poiché è una parola riservata, devi citare l'identificatore tra virgolette , ad esempio:

SELECT id FROM "user";

Il tuo ORM dovrebbe citare tutti gli identificatori o almeno le parole riservate. In caso contrario, è un bug nel tuo ORM. Puoi aggirare il bug ORM utilizzando una parola non riservata come nome di tabella.

Penso che sia un po' una verruca in psql che citi automaticamente gli identificatori che passi ai comandi della barra rovesciata. Quindi \d user funzionerà ma select * from user non. Dovresti scrivere \d "user" . Lo stesso problema si verifica con la distinzione tra maiuscole e minuscole dove \d MyTable funziona ma SELECT * FROM MyTable non funzionerà, devi scrivere SELECT * FROM "MyTable" .

Sarebbe bello dare un HINT messaggio su questo nell'errore. Sfortunatamente il parser e il pianificatore non hanno informazioni sufficienti nel momento in cui viene generato l'errore "colonna non esiste" per sapere che hai originariamente scritto una parola chiave, tutto ciò che vede è una scansione della funzione a quel punto.