Postgresql SQL выдает неоднозначную ошибку столбца - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть следующая таблица в моей базе данных Postgres

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;

, который завершается ошибкой

ОШИБКА: ссылка на столбец "клиенты" неоднозначна

Я не понимаю, почему это может происходить. Я надеюсь, что кто-то здесь может объяснить

1 Ответ

3 голосов
/ 20 февраля 2020

В части ОБНОВЛЕНИЯ вы должны использовать ИСКЛЮЧЕННУЮ «строку» для ссылки на значения. И чтобы сослаться на существующее значение, вам нужно снова поставить префикс столбца с таблицей, чтобы избежать неоднозначности между «исключенными» и «текущими» значениями:

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;
...