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
съобщение за това в грешката. За съжаление анализаторът и плановият инструмент нямат достатъчно информация в момента, когато се генерира грешката „колоната не съществува“, за да знаят, че първоначално сте написали ключова дума, всичко, което вижда, е сканиране на функция в този момент.