Почему я получаю неоднозначную колонку в моем PG при вставке конфликта? - PullRequest
0 голосов
/ 07 июня 2019

Вот мой запрос:

insert into zoning_algorithm_value (algorithm_value_id, value, zoning_id)
values (
           61,
           21,
           7321
       )
on conflict(algorithm_value_id)
    DO
        update set value = 21 where zoning_id = 7321 and algorithm_value_id = 61;

Я ссылаюсь только на одну таблицу. Вот ошибка, которую я получаю.

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

Как это может быть неоднозначно, когда есть только одна таблица и один столбец с таким именем? Как сделать так, чтобы этот апсерт работал?

1 Ответ

1 голос
/ 07 июня 2019

Вам нужно либо указать имя таблицы, либо EXCLUDED, чтобы предшествовать полям в предложении WHERE.

Например, если вы хотите обновить value только при "новом" zoning_id и algorithm_value_id - это 7321 и 61 соответственно:

insert into zoning_algorithm_value (algorithm_value_id, value, zoning_id)
values (61, 21, 7321)
on conflict(algorithm_value_id)
    DO
        update set value = 21 where EXCLUDED.zoning_id = 7321 and EXCLUDED.algorithm_value_id = 61;

Если вы хотите, чтобы WHERE ссылался на «существующие» значения записи, используйте имя таблицы.

...