Учитывая следующий запрос:
insert into shopify_app_shops as s
(
myshopify_name,
hostname,
user_status,
offline_access_token,
offline_access_token_updated_at,
updated_at
)
values
(
%(myshopify_name)s,
%(hostname)s,
%(user_status)s,
%(offline_access_token)s,
now(),
now()
)
on conflict (myshopify_name)
do update
set
hostname=%(hostname)s,
user_status=%(user_status)s,
offline_access_token_updated_at =
CASE
WHEN offline_access_token == %(offline_access_token)s
THEN offline_access_token_updated_at
ELSE now()
END,
offline_access_token=%(offline_access_token)s,
updated_at = now()
returning myshopify_name
;
Я получаю сообщение об ошибке:
Ошибка: ссылка на столбец «offline_access_token» неоднозначна LINE 28: WHEN offline_access_token == NULL
Однако, если я полностью укажу поле, добавив имя таблицы следующим образом:
WHEN shopify_app_shops.offline_access_token == %(offline_access_token)s
Вместо этого я получаю эту ошибку:
Ошибка: неверная ссылка на запись FROM для таблицы "shopify_app_shops" LINE 28: WHEN shopify_app_shops.offline_access_token == NULL
На данный момент я в недоумении, что мне делать!
В документации для операторов обновления postgresql-11 четко указано, что выражение, используемое для set value может содержать ссылки на другие поля, чтобы получить доступ к старым значениям:
выражение
Выражение для присвоения столбцу. Выражение может использовать старые значения этого и других столбцов таблицы.
Так что я делаю неправильно?