Postgres не будет принимать псевдоним таблицы перед именем столбца

Я использую фреймворк (Jodd), который добавляет псевдоним таблицы к именам столбцов в SQL Select. Это похоже на хорошо сформированный SQL, но Postgres задыхается.

update GREETING Greeting set Greeting.ID=5, Greeting.NAME='World', Greeting.PHRASE='Hello World!' where (Greeting.ID=5) 

дает ошибку:

 Error: ERROR: column "greeting" of relation "greeting" does not exist SQLState: 42703 

Есть ли способ заставить Postgres принять этот SQL? Моя другая альтернатива – взломать фреймворк, который я не хочу делать.

Проблема состоит в том, что вы включаете псевдоним таблицы в предложение SET в столбцах. См. Документацию UPDATE в документах Postgres :

column

Имя столбца в table . Имя столбца может быть квалифицировано с именем подполя или индексом массива, если необходимо. Не включайте имя таблицы в спецификацию целевого столбца – например, UPDATE tab SET tab.col = 1 является недопустимой.

Это действительно в Postgres:

 update GREETING Greeting set NAME='World', PHRASE='Hello World!' where Greeting.ID=5 ; 

Попробуйте использовать последнюю версию Jodd, v3.3.7. где эта проблема исправлена.

Проблема была в библиотеке Jodd: методы обновления объектов генерировали инструкцию update с псевдонимами таблиц. Новая версия просто не ставит псевдонимы таблицы; который работает и для Postgres, и для других баз данных.

Проверьте документацию по UPDATE , в частности, для части столбца : недопустимо префикс столбцов с псевдонимом таблицы в предложении SET .

 UPDATE GREETING Greeting SET ID=5, NAME='World', PHRASE='Hello World!' WHERE (Greeting.ID=5);