Если у меня есть таблица, например:
MyTable
id date value replaced_by_id
1 2020-01-01 10
2 2020-01-02 20 3
3 2020-01-02 21
С уникальным ограничением по дате и replace_by, например,
CREATE UNIQUE INDEX my_table_null_test ON my_table (date, (replaced_by_id is null))
WHERE replaced_by_id IS NULL;
Как я могу создать оператор вставки, который устанавливает конфликтующую строку replace_by_id к новому идентификатору строк, а затем вставляет новую строку?
Вдоль строк
insert into my_table (id, date, value) values (gen_id(), '2020-01-02', 21)
on conflict (date, (replaced_by_id is null) ) where replaced_by_id is null
do update
set replaced_by_id = excluded.id
**now insert the new row (insert the excluded row)**
, скажем, файл, значения поступают из файла, который имел много значений для та же дата. например,
date value
2020-01-01 10
2020-01-02 20
2020-01-02 21
2020-01-02 22
2020-01-02 23
2020-01-02 24
2020-01-02 22
приведет к
MyTable
id date value replaced_by_id
1 2020-01-01 10
2 2020-01-02 20 3
3 2020-01-02 21 4
4 2020-01-02 22 5
5 2020-01-02 23 6
6 2020-01-02 24 7
7 2020-01-02 22