2016-06-26 6 views
1

У меня ситуация ниже. Я получаю данные из источника данных в формате CSV каждые две недели. Я загружаю это на постгр. ДБ. Мне нужно обеспечить следующиеКак обновить и вставить данные в postgres

  1. данных в Postgres не должен быть удален

  2. любых обновлений в CSV должно быть перенесены без добавления новых строк

  3. новых данных, отмеченных Uinque ID необходимо добавить

другими словами, разница между набором данных должна быть добавлена ​​к Postgres

В современной реализации я использую узел-Postgres для потоковой передачи данных в Postgres

Я не знаю, как реализовать обновления

Любые идеи? В идеале, если есть способ создать поток таблицы temp, новые данные и разница между старой и временной таблицей будут хорошими.

ответ

0

Если CSV уже имеет уникальный идентификатор, и вы используете PostgreSQL 9.5+, то вы можете использовать INSERT ... ON CONFLICT DO UPDATE .... В противном случае вы можете создать процедуру plpgsql сохраняются с параметрами (либо отдельных значений или одного параметра ROW), что делает

UPDATE table SET 
    value = param_value 
    ... 
WHERE ID = param_id; 

IF NOT found THEN 
    INSERT INTO table (ID, value, ...) 
    VALUES (param_id, param_value, ...); 
END IF; 

И выполнить эту функцию для каждой строки в CSV. Вы можете сначала импортировать CSV во временную таблицу и сделать

SELECT the_above_function(f.id, f.value, ...) 
FROM csv_temp_table f; 
Смежные вопросы