PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Идентификаторът на колона Doctrine не съществува в PostgreSQL

user е запазена дума . Това е псевдоним за current_user .

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

Ако искате да използвате user като име на таблица, тъй като това е запазена дума, трябва да цитирате идентификатора , напр.:

SELECT id FROM "user";

Вашият ORM трябва да цитира всички идентификатори или поне запазени думи. Ако не го направите, това е грешка във вашата ORM. Можете да заобиколите ORM грешката, като използвате незапазена дума като име на таблица.

Мисля, че това е малко брадавица в psql че автоматично цитира идентификаторите, които предавате на командите с обратна наклонена черта. Така че \d user ще работи, но select * from user няма да Трябва да напишете \d "user" . Същият проблем възниква с чувствителността към малки и главни букви, когато \d MyTable работи, но SELECT * FROM MyTable няма да работи, трябва да напишете SELECT * FROM "MyTable" .

Би било хубаво да дадете HINT съобщение за това в грешката. За съжаление анализаторът и плановият инструмент нямат достатъчно информация в момента, когато се генерира грешката „колоната не съществува“, за да знаят, че първоначално сте написали ключова дума, всичко, което вижда, е сканиране на функция в този момент.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Заключете за SELECT, така че друг процес да не получи стари данни

  2. Рег. поддръжка на транзакции за пролетно пакетно задание на ниво задание

  3. Как работи UNION в PostgreSQL

  4. Как да изброя активните връзки на PostgreSQL?

  5. Как мога сигурно (косвено) да направя запитване до база данни postgresql в android?