user er et reserveret ord
. Det er et alias for current_user .
regress=> SELECT * FROM user;
current_user
--------------
myusername
(1 row)
Hvis du vil bruge user som et tabelnavn, da det er et reserveret ord, skal du citere identifikatoren , f.eks.:
SELECT id FROM "user";
Din ORM bør citere alle identifikatorer, eller i det mindste reserverede ord. Undladelse af at gøre det er en fejl i din ORM. Du kan omgå ORM-fejlen ved at bruge et ikke-reserveret ord som tabelnavn.
Jeg synes, det er lidt af en vorte i psql at den automatisk citerer identifikatorer, du sender til backslash-kommandoer. Så \d user vil virke, men select * from user vil ikke. Du skal skrive \d "user" . Det samme problem opstår med store og små bogstaver, hvor \d MyTable virker, men SELECT * FROM MyTable ikke virker, skal du skrive SELECT * FROM "MyTable" .
Det ville være rart at give et HINT besked om dette i fejlen. Desværre har parseren og planlæggeren ikke rigtig nok information på det tidspunkt, hvor "kolonnen eksisterer ikke"-fejlen bliver genereret til at vide, at du oprindeligt skrev et søgeord, det eneste, den ser, er en funktionsscanning på det tidspunkt.