user е запазена дума
. Това е псевдоним за current_user .
regress=> SELECT * FROM user;
current_user
--------------
myusername
(1 row)
Ако искате да използвате user като име на таблица, тъй като това е запазена дума, трябва да цитирате идентификатора , напр.:
SELECT id FROM "user";
Вашият ORM трябва да цитира всички идентификатори или поне запазени думи. Ако не го направите, това е грешка във вашата ORM. Можете да заобиколите ORM грешката, като използвате незапазена дума като име на таблица.
Мисля, че това е малко брадавица в psql че автоматично цитира идентификаторите, които предавате на командите с обратна наклонена черта. Така че \d user ще работи, но select * from user няма да Трябва да напишете \d "user" . Същият проблем възниква с чувствителността към малки и главни букви, когато \d MyTable работи, но SELECT * FROM MyTable няма да работи, трябва да напишете SELECT * FROM "MyTable" .
Би било хубаво да дадете HINT съобщение за това в грешката. За съжаление анализаторът и плановият инструмент нямат достатъчно информация в момента, когато се генерира грешката „колоната не съществува“, за да знаят, че първоначално сте написали ключова дума, всичко, което вижда, е сканиране на функция в този момент.