sql >> Database teknologi >  >> RDS >> PostgreSQL

Doktrinkolonne-id findes ikke på PostgreSQL

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.



  1. Forberedelse af en MySQL INSERT/UPDATE-sætning med DEFAULT-værdier

  2. JDBC grundlæggende begreber, Pooling og Threading

  3. Brug af Dapper med Oracle lagrede procedurer, der returnerer markører

  4. giv SELECT adgang til v$session til andre brugere