Как реализовать batch update таблицы

«Как реализовать batch update таблицы» — вопрос из категории Базы данных, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для эффективного 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 + временную таблицу