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.