Возможно всеже стоит загрузить файл в буферную таблицу (сруктура котрой будет идентичка целевой таблице), а затем уже средствами базы данных осуществить мерж.
Если ключем является положительное число, то возможно буфер и не понадобится. Просто загрузив файл в отрицательный диапазон значений ключа целевой таблицы можно обойтсь без буфера. Баланс между скоростью мержа и размером коммита (кол-вом модификаций в одной транцакции) можно отрегурилоровать используя относитльно небольшие блоки для обработки. Думаю этот способ может Вам подойти.
т.е. например если у вас есть таблица типа:
create table t_mytable (
id integer,
field1 type1,
....,
CONSTRAINT pk_mytable PRIMARY KEY (id));
и есть какие-то значения:
1 |
value1 |
value... |
... |
2 |
value2 |
value... |
... |
3 |
value3 |
value... |
... |
вы загружаете в нее же данные из файла инвертируя ключ, например:
-3 |
valueC |
value... |
... |
-1 |
valueA |
value... |
... |
1 |
value1 |
value... |
... |
2 |
value2 |
value... |
... |
3 |
value3 |
value... |
... |
Ну а дальше есть масса вариантов как удалить отсутвующие ключи, и обновить новыми значениями положительную часть ключей. Если интересно, могу написать, но думаю Вы можете написать его и сам.