sql >> Base de Datos >  >> RDS >> PostgreSQL

La identificación de la columna Doctrine no existe en PostgreSQL

user es una palabra reservada . Es un alias para current_user .

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

Si desea utilizar user como nombre de tabla, dado que es una palabra reservada, debe citar el identificador , por ejemplo:

SELECT id FROM "user";

Su ORM debe citar todos los identificadores, o al menos palabras reservadas. El no hacerlo es un error en su ORM. Puede evitar el error de ORM utilizando una palabra no reservada como nombre de tabla.

Creo que es una pequeña verruga en psql que cita automáticamente los identificadores que pasa a los comandos de barra invertida. Entonces \d user funcionará pero select * from user no. Deberías escribir \d "user" . El mismo problema surge con la distinción entre mayúsculas y minúsculas donde \d MyTable funciona pero SELECT * FROM MyTable no funcionará, debe escribir SELECT * FROM "MyTable" .

Sería bueno dar una HINT mensaje sobre esto en el error. Desafortunadamente, el analizador y el planificador realmente no tienen suficiente información en el momento en que se genera el error "la columna no existe" para saber que originalmente escribió una palabra clave, todo lo que ve es un escaneo de función en ese punto.