Ответ 1
Я бы COPY
файл во временную таблицу и обновил фактическую таблицу.
Может выглядеть так:
CREATE TEMP TABLE tmp_x (id int, apple text, banana text); -- but see below
COPY tmp_x FROM '/absolute/path/to/file' (FORMAT csv);
UPDATE tbl
SET banana = tmp_x.banana
FROM tmp_x
WHERE tbl.id = tmp_x.id;
DROP TABLE tmp_x; -- else it is dropped at end of session automatically
Если импортированная таблица соответствует точно обновляемой таблице, это может быть удобно:
CREATE TEMP TABLE tmp_x AS SELECT * FROM tbl LIMIT 0;
Создает пустую временную таблицу, соответствующую структуре существующей таблицы, без ограничений.
Большие таблицы
Если таблица импорта большая, она может заплатить за временное увеличение temp_buffers
для сеанса (первая вещь в сеансе):
SET temp_buffers = '500MB'; -- example value
Добавьте индекс во временную таблицу:
CREATE INDEX tmp_x_id_idx ON tmp_x(id);
И запустите ANALYZE
вручную, так как временные таблицы не покрываются автоанализом/автоанализом.
ANALYZE tmp_x;
Похожие ответы: