user
to słowo zastrzeżone
. To alias dla current_user
.
regress=> SELECT * FROM user;
current_user
--------------
myusername
(1 row)
Jeśli chcesz użyć user
jako nazwę tabeli, ponieważ jest to słowo zastrzeżone, musisz zacytować identyfikator , np.:
SELECT id FROM "user";
Twój ORM powinien podawać wszystkie identyfikatory lub przynajmniej zastrzeżone słowa. Niezastosowanie się do tego jest błędem w twoim ORM. Możesz obejść błąd ORM, używając niezarezerwowanego słowa jako nazwy tabeli.
Myślę, że to trochę brodawka w psql
że automatycznie cytuje identyfikatory, które przekazujesz do poleceń odwrotnego ukośnika. Więc \d user
zadziała, ale select * from user
przyzwyczajenie. Powinieneś napisać \d "user"
. Ten sam problem pojawia się w przypadku rozróżniania wielkości liter, gdzie \d MyTable
działa, ale SELECT * FROM MyTable
nie zadziała, musisz napisać SELECT * FROM "MyTable"
.
Byłoby miło dać HINT
komunikat o tym w błędzie. Niestety parser i planista nie mają tak naprawdę wystarczającej ilości informacji w momencie generowania błędu „kolumna nie istnieje”, aby wiedzieć, że pierwotnie napisałeś słowo kluczowe, widzi tylko skanowanie funkcji w tym momencie.