sql >> Database >  >> RDS >> PostgreSQL

Doctrinekolom-ID bestaat niet op PostgreSQL

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.



  1. MySQL 5.7 retourneert alle kolommen van de tabel op basis van een afzonderlijke kolom

  2. Hiërarchische tagging in SQL

  3. Hoe krijg ik de landcode van de (intl-tel-input) plug-in na het indienen van het formulier?

  4. Is er MySQL.. INSERT ... ON DUPLICATE KEY SELECT?