【发布时间】:2019-09-14 23:43:46
【问题描述】:
给定以下查询:
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”不明确第 28 行:WHEN offline_access_token == NULL
但是,如果我通过像这样添加表名来完全指定字段:
WHEN shopify_app_shops.offline_access_token == %(offline_access_token)s
我得到了这个错误:
失败:对表“shopify_app_shops”第 28 行的 FROM 子句条目的无效引用:何时 shopify_app_shops.offline_access_token == NULL
此时我不知所措!
documentation for postgresql-11 update statements 明确指出用于设置值的表达式可以包含对其他字段的引用以访问旧值:
表达式
分配给列的表达式。表达式可以使用该列和表中其他列的旧值。
那我做错了什么?
【问题讨论】:
标签: postgresql sql-update conditional-statements expression postgresql-11