sql >> Databasteknik >  >> RDS >> PostgreSQL

Doktrinkolumn-id finns inte på PostgreSQL

user är ett reserverat ord . Det är ett alias för current_user .

regress=> SELECT * FROM user;
 current_user 
--------------
 myusername
(1 row)

Om du vill använda user som ett tabellnamn, eftersom det är ett reserverat ord måste du citera identifieraren , t.ex.:

SELECT id FROM "user";

Din ORM bör citera alla identifierare, eller åtminstone reserverade ord. Att inte göra det är en bugg i din ORM. Du kan kringgå ORM-felet genom att använda ett icke-reserverat ord som tabellnamn.

Jag tycker att det är lite av en vårta i psql att den automatiskt citerar identifierare som du skickar till kommandon med snedstreck. Så \d user kommer att fungera men select * from user vana. Du bör behöva skriva \d "user" . Samma problem uppstår med skiftlägeskänslighet där \d MyTable fungerar men SELECT * FROM MyTable kommer inte att fungera måste du skriva SELECT * FROM "MyTable" .

Det skulle vara trevligt att ge ett HINT meddelande om detta i felet. Tyvärr har tolken och planeraren inte riktigt tillräckligt med information när felet "kolumnen existerar inte" genereras för att veta att du ursprungligen skrev ett nyckelord, allt den ser är en funktionsskanning vid den tidpunkten.



  1. kommer att visa tabellstatus visa exakta rader i tabellen?

  2. Oracle BLOB-datatyp till RichTextBox

  3. Ansluter Android till MS SQL SERVER 2008

  4. Utlösare:hur kan jag initiera värdet på en tabell med ett värde på en annan?