【问题标题】:pgsql on conflict (id) do update return "column reference "id" is ambiguous"pgsql on conflict (id) do update return “列引用 “id” 不明确”
【发布时间】:2020-07-08 11:09:47
【问题描述】:

我有错误。

“pq:列引用“id”不明确”

我可以通过添加表名 WHERE t.id = $1 解决问题

但为什么我有“暧昧”?

INSERT INTO t(id)
VALUES ($1)
ON CONFLICT (id)
DO UPDATE
SET 
    id=10
WHERE id = $1

【问题讨论】:

  • 是什么阻止了该声明针对id=10 引发另一个UNIQUE 违规?如果您多次执行它,实际上是有保证的。

标签: sql postgresql ambiguous


【解决方案1】:

您需要指定where 子句是指表中已经存在的数据 还是正在进入的数据。大概您打算:

INSERT INTO t(id)
    VALUES (7)
    ON CONFLICT (id)
    DO UPDATE SET id = 10
    WHERE excluded.id = 7;

excluded 用于已在行中的值(该行被约束“排除”)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 2018-08-02
    • 2016-05-11
    • 1970-01-01
    • 2022-01-19
    • 2012-04-06
    • 2021-02-16
    • 1970-01-01
    相关资源
    最近更新 更多