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.