партиями по 100к записей в таблицу (первичный ключ key+value, т.е. дубликаты не вставятся), получаю affected rows и логирую:
INSERT INTO entries (key, value, source)
SELECT key, value, source
FROM import_buffer as src
WHERE src.id BETWEEN batch_start_key AND batch_end_key
ON CONFLICT DO NOTHING;
get diagnostics actually_affected = row_count;
в логе вижу
INSERTED 100000 RECORDS 17000000 - 17100000 OF 4045424231
INSERTED 100000 RECORDS 17100000 - 17200000 OF 4045424231
INSERTED 100000 RECORDS 17200000 - 17300000 OF 4045424231
INSERTED 100000 RECORDS 17300000 - 17400000 OF 4045424231
Как он умудрился вставить 100к записей, а не 99999, если каждый следующий интервал на 1 перекрывается с предыдущим?
дык between же включает концы отрезк
Включает, в том-то и дело. Значит, предыдущая итерация вставила то, что будет пытаться вставить следующая и у следующей итерации affected rows будет меньше
Первичный ключ составной? Key+value? Не просто key?
А сколько строк между 10 и 20 включая границы? 😀
да, точно составной
Ну поэтому on conflict не работает наверно
тьфу, блин, 11 же
спасибо, и правда мозг к вечеру поплыл)
WELCOME TO POSTGRESQL (!)
Обсуждают сегодня