Postgres: конфликт с неявной целью конфликта - PullRequest
0 голосов
/ 25 марта 2019

В спецификации Postgres 10 и 11 для вставки написано:

НА КОНФЛИКТЕ

У меня есть таблица:

create table c (
    e text not null,
    m text not null,
    v numeric not null,
    PRIMARY KEY (e, m)
)

а я хочу сделать

insert into candle values (...) 
    on conflict do update set
            v = 5

но я получаю ошибку:

ON CONFLICT DO UPDATE требует спецификации логического вывода или имени ограничения Подсказка: например, ON CONFLICT (column_name)

Почему я должен предоставить запутывающую цель? Как предоставить первичный ключ или какой-то другой набор столбцов?

Ответы [ 2 ]

2 голосов
/ 25 марта 2019

Вы можете иметь несколько ограничений и, следовательно, несколько альтернативных действий.

Вы можете просто указать имена столбцов:

insert into candle values (...) 
on conflict (e,m) do update set
  v = 5
1 голос
/ 26 марта 2019

Да, <em>conflict_target</em> является необязательным, но только с DO NOTHING.

За документацию :

Для ON CONFLICT DO NOTHING, этонеобязательно указывать <em>conflict_target</em>;если опущено, обрабатываются конфликты со всеми используемыми ограничениями (и уникальными индексами).Для ON CONFLICT DO UPDATE необходимо указать <em>conflict_target</em>.

...