PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

O id da coluna do Doctrine não existe no PostgreSQL


user é uma palavra reservada . É um alias para current_user .
regress=> SELECT * FROM user;
 current_user 
--------------
 myusername
(1 row)

Se você quiser usar user como nome de tabela, pois é uma palavra reservada, você deve citar o identificador , por exemplo.:
SELECT id FROM "user";

Seu ORM deve citar todos os identificadores, ou pelo menos palavras reservadas. Não fazer isso é um bug em seu ORM. Você pode contornar o bug ORM usando uma palavra não reservada como um nome de tabela.

Eu acho que é um pouco de verruga no psql que ele cita automaticamente os identificadores que você passa para os comandos de barra invertida. Então \d user funcionará, mas select * from user não vai. Você deve escrever \d "user" . O mesmo problema surge com distinção entre maiúsculas e minúsculas onde \d MyTable funciona, mas SELECT * FROM MyTable não vai funcionar, você tem que escrever SELECT * FROM "MyTable" .

Seria bom dar uma HINT mensagem sobre isso no erro. Infelizmente, o analisador e o planejador realmente não têm informações suficientes no momento em que o erro "coluna não existe" é gerado para saber que você escreveu originalmente uma palavra-chave, tudo o que vê é uma verificação de função nesse ponto.