PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Identyfikator kolumny Doctrine nie istnieje w PostgreSQL

user to słowo zastrzeżone . To alias dla current_user .

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

Jeśli chcesz użyć user jako nazwę tabeli, ponieważ jest to słowo zastrzeżone, musisz zacytować identyfikator , np.:

SELECT id FROM "user";

Twój ORM powinien podawać wszystkie identyfikatory lub przynajmniej zastrzeżone słowa. Niezastosowanie się do tego jest błędem w twoim ORM. Możesz obejść błąd ORM, używając niezarezerwowanego słowa jako nazwy tabeli.

Myślę, że to trochę brodawka w psql że automatycznie cytuje identyfikatory, które przekazujesz do poleceń odwrotnego ukośnika. Więc \d user zadziała, ale select * from user przyzwyczajenie. Powinieneś napisać \d "user" . Ten sam problem pojawia się w przypadku rozróżniania wielkości liter, gdzie \d MyTable działa, ale SELECT * FROM MyTable nie zadziała, musisz napisać SELECT * FROM "MyTable" .

Byłoby miło dać HINT komunikat o tym w błędzie. Niestety parser i planista nie mają tak naprawdę wystarczającej ilości informacji w momencie generowania błędu „kolumna nie istnieje”, aby wiedzieć, że pierwotnie napisałeś słowo kluczowe, widzi tylko skanowanie funkcji w tym momencie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres pg_dump zrzuca bazę danych za każdym razem w innej kolejności

  2. SqlAlchemy Postgres JSON jak filtrować za pomocą operatora znaku zapytania?

  3. Pobierz wiek z daty w PostgreSQL

  4. Log Stacktrace bieżącego interpretera Pythona za pomocą wyzwalacza PostgreSQL

  5. Musisz zainstalować postgresql-server-dev-X.Y do budowania rozszerzenia po stronie serwera lub libpq-dev do budowania aplikacji po stronie klienta