Подтвердить что ты не робот

Как обновить выбранные строки со значениями из файла CSV в Postgres?

Я использую Postgres и хотел бы сделать большой запрос на обновление, который будет извлекаться из файла CSV, скажем, у меня есть таблица, получившая (id, banana, apple).

Я хотел бы запустить обновление, которое изменяет Бананы, а не Яблоки, каждая новая Банана и их идентификатор будут в CSV файле.

Я попытался посмотреть сайт Postgres, но примеры убивают меня.

4b9b3361

Ответ 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;

Похожие ответы: