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? Другая альтернатива - взломать фреймворк, который я не хочу делать.
Ответы
Ответ 1
Проблема заключается в том, что вы включаете псевдоним таблицы в предложение 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 ;
Ответ 2
Попробуйте использовать последнюю версию Jodd, v3.3.7. где эта проблема исправлена.
Проблема была в библиотеке Jodd: методы обновления объектов генерировали инструкцию update с псевдонимами таблиц. Новая версия просто не ставит псевдонимы таблицы; который работает и для Postgres, и для других баз данных.
Ответ 3
Проверьте документацию UPDATE
, особенно для части column: запрещено префикс столбцов с помощью псевдоним таблицы в предложении SET
.
UPDATE GREETING Greeting
SET ID=5, NAME='World', PHRASE='Hello World!'
WHERE (Greeting.ID=5);