Ответ
Для эффективного batch update в PostgreSQL можно использовать UPDATE с unnest и временными таблицами. Пример:
UPDATE my_table
SET column1 = updates.new_value
FROM (
SELECT unnest(ARRAY[1, 2, 3]) AS id,
unnest(ARRAY['a', 'b', 'c']) AS new_value
) AS updates
WHERE my_table.id = updates.id;
В Go с использованием pgx:
batch := &pgx.Batch{}
for _, item := range items {
batch.Queue("UPDATE table SET field=$1 WHERE id=$2", item.Value, item.ID)
}
results := conn.SendBatch(ctx, batch)
defer results.Close()
// Обработка ошибок
_, err := results.Exec()
if err != nil {
return err
}
Ключевые моменты:
- Используйте транзакцию для атомарности
- Ограничьте размер батча (обычно 100-1000 записей)
- Для больших объемов данных рассмотрите COPY + временную таблицу