INSERT
db.insert(table) builds an INSERT INTO query. It supports single and multi-row inserts, an optional RETURNING clause, and runtime value injection via .prepare().
const { query, args } = db.insert('user')
.values({ name: 'Alice', email: 'alice@example.com', active: true })
.prepare()();INSERT INTO user
(name, email, active)
VALUES ($1, $2, $3).values()
Accepts a single row object or an array of row objects. The column list is derived from the keys of the first row — all rows must have the same shape.
Single row
db.insert('user')
.values({ name: 'Alice', email: 'alice@example.com', active: true })
.prepare()()INSERT INTO user
(name, email, active)
VALUES ($1, $2, $3)Multiple rows
db.insert('post')
.values([
{ author_id: 1, title: 'Hello', published: false, views: 0 },
{ author_id: 1, title: 'World', published: true, views: 42 },
])
.prepare()()INSERT INTO post
(author_id, title, published, views)
VALUES ($1, $2, $3, $4),
($5, $6, $7, $8).returning()
Appends RETURNING to the query. Accepts the same string, array, and object forms as .field():
// All columns
db.insert('user')
.values({ name: 'Alice', email: 'alice@example.com', active: true })
.returning('*')
.prepare()()
// Specific columns
db.insert('user')
.values({ name: 'Bob', email: 'bob@example.com', active: true })
.returning(['id', 'name'])
.prepare()()INSERT INTO user
(name, email, active)
VALUES ($1, $2, $3)
RETURNING id, name// With aliases
.returning({ userId: 'id', userName: 'name' })
// RETURNING id AS userId, name AS userName.build() / .execute()
// Immediate { query, args }
const { query, args } = db.insert('user')
.values({ name: 'Alice', email: 'alice@example.com', active: true })
.build();
// Pass straight to a client
const result = await db.insert('user')
.values({ name: 'Alice', email: 'alice@example.com', active: true })
.returning(['id'])
.execute((q, a) => pgClient.query<{ id: number }>(q, a));Both use static values only. For runtime values, use .prepare({ values: true }).
.prepare() — runtime options
| Option | Type | Behaviour |
|---|---|---|
values |
true |
Supply the row(s) at call time instead of build time |
Runtime values
const insertUser = db.insert('user').prepare({ values: true });
insertUser({ values: { name: 'Carol', email: 'carol@example.com', active: false } })
// INSERT INTO user (name, email, active) VALUES ($1, $2, $3)
// args: ['Carol', 'carol@example.com', false]This is useful when you want a reusable prepared statement — build the query once, call it with different rows each time.