Postgres Upsert против усечения и вставки - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть поток данных, который я могу воспроизвести в любое время, чтобы перезагрузить данные в таблицу Postgres. Допустим, в моей таблице миллионы строк, и я добавляю новый столбец. Теперь я могу воспроизвести этот поток данных, чтобы сопоставить ключ данных с именем столбца, который я только что добавил.

У меня есть два варианта:

1) Truncate, а затем Insert

2) Upsert

Какой вариант лучше с точки зрения производительности?

1 Ответ

1 голос
/ 05 апреля 2019

Как PostgreSQL делает мультиверсионный, каждое обновление создает новую версию строки. Старая версия строки должна быть исправлена ​​позже.

Это означает дополнительную работу и таблицы с большим количеством пустого пространства в них.

С другой стороны, TRUNCATE просто выбрасывает старый стол, что очень быстро.

Вы можете повысить производительность, используя COPY вместо INSERT для загрузки больших объемов данных.

...