列引用 xxx 在 upsert 语句中不明确(候选:excluded.xxx,table.xxx)

column reference xxx is ambiguous (candidates: excluded.xxx,table.xxx) in upsert statement

我想在 cockroach 数据库中执行 upsert sql 语句。

我想在 table 中不存在特定 id 时将行插入 table 并更新 name 列,当具有给定值的 id 存在于 table 中时。

Table定义:

CREATE TABLE IF NOT EXISTS programs_tiers (
  id STRING PRIMARY KEY,
  program_id STRING NOT NULL REFERENCES programs (id),
  name STRING,
  created TIMESTAMPTZ DEFAULT current_timestamp(),
  UNIQUE(program_id, name)
);

这是我使用 knex 的 sql 声明。

 const response =  await this.knex.raw('INSERT INTO programs_tiers (id,name) values(?,?) ON CONFLICT(id) DO UPDATE SET name = excluded.name  WHERE program_id = ? AND id = ?',[tierId, tierName, programId, tierId]);

我收到以下错误:

error: column reference "id" is ambiguous (candidates: excluded.id, programs_tiers.id).

我该如何解决这个问题?

指定 table 名称以修复歧义:

[...] WHERE program_id = ? AND programs_tiers.id = ?
                               ^^^^^^^^^^^^^^^