---
title: "data batch inserts"
description: "Individual INSERT statements have high overhead. Batch multiple rows in single statements or use COPY."
type: skill
canonical_url: https://claudary.paisolsolutions.com/skills/data-batch-inserts
source: "Claudary"
difficulty: intermediate
author: "Claude Code Knowledge Pack"
date: 2026-07-10T11:19:22.671Z
license: CC-BY-4.0
attribution: "data batch inserts — Claudary (https://claudary.paisolsolutions.com/skills/data-batch-inserts)"
---

# data batch inserts
Individual INSERT statements have high overhead. Batch multiple rows in single statements or use COPY.

## Overview

---
title: Batch INSERT Statements for Bulk Data
impact: MEDIUM
impactDescription: 10-50x faster bulk inserts
tags: batch, insert, bulk, performance, copy
---

## Batch INSERT Statements for Bulk Data

Individual INSERT statements have high overhead. Batch multiple rows in single statements or use COPY.

**Incorrect (individual inserts):**

```sql
-- Each insert is a separate transaction and round trip
insert into events (user_id, action) values (1, 'click');
insert into events (user_id, action) values (1, 'view');
insert into events (user_id, action) values (2, 'click');
-- ... 1000 more individual inserts

-- 1000 inserts = 1000 round trips = slow
```

**Correct (batch insert):**

```sql
-- Multiple rows in single statement
insert into events (user_id, action) values
  (1, 'click'),
  (1, 'view'),
  (2, 'click'),
  -- ... up to ~1000 rows per batch
  (999, 'view');

-- One round trip for 1000 rows
```

For large imports, use COPY:

```sql
-- COPY is fastest for bulk loading
copy events (user_id, action, created_at)
from '/path/to/data.csv'
with (format csv, header true);

-- Or from stdin in application
copy events (user_id, action) from stdin with (format csv);
1,click
1,view
2,click
\\.
```

Reference: [COPY](https://www.postgresql.org/docs/current/sql-copy.html)

---

Source: [Claudary](https://claudary.paisolsolutions.com/skills/data-batch-inserts) · https://claudary.paisolsolutions.com
