Postgresql SQL 抛出不明确的列错误

Postgresql SQL throws ambiguous column error

我的 Postgres 数据库中有以下 table

CREATE TABLE "public"."zuffs" 
(
 "hash" bigint NOT NULL,
 "zuff" BIGINT NOT NULL,
 "lat" INTEGER NOT NULL,
 "lng" INTEGER NOT NULL,
 "weather" INTEGER DEFAULT 0,
 "expires" INTEGER DEFAULT 0,
 "clients" INTEGER DEFAULT 0,
 CONSTRAINT "zuffs_hash" PRIMARY KEY ("hash")
) WITH (oids = false);

我想向其添加新行或更新 weather, expires & clients 列(如果该行已存在)。为此,我让 PHP 脚本生成以下 SQL

INSERT INTO zuffs (hash,zuff,lat,lng,weather,expires)         
VALUES(5523216,14978310951341,4978,589,105906435,4380919) ON CONFLICT(hash) DO UPDATE SET 
weather = 105906435,expires = 4380919,clients = clients + 1;

失败并出现错误

ERROR: column reference "clients" is ambiguous

我不明白为什么会这样。希望这里有人能解释一下

在 UPDATE 部分,您应该使用 EXCLUDED "row" 来引用值。要引用现有值,您需要再次在列前加上 table 以避免 "excluded" 和 "current" 值之间的歧义:

INSERT INTO zuffs (hash,zuff,lat,lng,weather,expires)         
VALUES (5523216,14978310951341,4978,589,105906435,4380919) 
ON CONFLICT(hash) DO UPDATE 
  SET weather = excluded.weather,
      expires = excluded.expires,
      clients = zuffs.clients + 1;