user is een gereserveerd woord
. Het is een alias voor current_user .
regress=> SELECT * FROM user;
current_user
--------------
myusername
(1 row)
Als u user . wilt gebruiken als tabelnaam, aangezien het een gereserveerd woord is, moet u de identifier citeren , bijv.:
SELECT id FROM "user";
Uw ORM moet alle identifiers citeren, of op zijn minst gereserveerde woorden. Als u dit niet doet, is er een bug in uw ORM. U kunt de ORM-bug omzeilen door een niet-gereserveerd woord als tabelnaam te gebruiken.
Ik vind het een beetje een wrat in psql dat het automatisch identifiers aanhaalt die u doorgeeft aan backslash-commando's. Dus \d user zal werken, maar select * from user zal niet. U zou \d "user" . moeten schrijven . Hetzelfde probleem doet zich voor met hoofdlettergevoeligheid waarbij \d MyTable werkt maar SELECT * FROM MyTable werkt niet, je moet SELECT * FROM "MyTable" . schrijven .
Het zou leuk zijn om een HINT . te geven bericht hierover in de fout. Helaas hebben de parser en planner niet echt genoeg informatie op het moment dat de "kolom bestaat niet"-foutmelding wordt gegenereerd om te weten dat u oorspronkelijk een trefwoord hebt geschreven. Op dat moment ziet het alleen een functiescan.