drizzle-seed updates
Bug fixes
- [BUG]: drizzle seed doesn't work with libSQL
- [BUG]: Seed UUIDs not compatible with Zod/v4
- [BUG]: drizzle seed generates invalid input value (number) for enum strings (pg)
- [BUG]: drizzle seed breaks serial sequence sync with Postgres serial type
Features
ignore column in refinements
Now you can let drizzle-seed know if you want to ignore column during seeding.
// schema.ts
import { integer, pgTable, text } from "drizzle-orm/pg-core";
export const users = pgTable("users", {
id: integer().primaryKey(),
name: text().notNull(),
age: integer(),
photo: text(),
});// index.ts
import { drizzle } from "drizzle-orm/node-postgres";
import { seed } from "drizzle-seed";
import * as schema from "./schema.ts";
async function main() {
const db = drizzle(process.env["DATABASE_URL"]!);
await seed(db, schema).refine((f) => ({
users: {
count: 5,
columns: {
name: f.fullName(),
photo: false, // the photo column will not be seeded, allowing the database to use its default value.
},
},
}));
}
main();Improvements
Added min, max parameters to time generator
await seed(db, { timeTable: schema.timeTable }).refine((funcs) => ({
timeTable: {
count,
columns: {
time: funcs.time({
min: "13:12:13",
max: "15:12:13",
}),
},
},
}));Added min, max parameters to timestamp generator
await seed(db, { timestampTable: schema.timestampTable }).refine((funcs) => ({
timestampTable: {
count,
columns: {
timestamp: funcs.timestamp({
min: "2025-03-07 13:12:13.123Z",
max: "2025-03-09 15:12:13.456Z",
}),
},
},
}));Added min, max parameters to datetime generator
await seed(db, { datetimeTable: schema.datetimeTable }).refine((funcs) => ({
datetimeTable: {
count,
columns: {
datetime: funcs.datetime({
min: "2025-03-07 13:12:13Z",
max: "2025-03-09 15:12:13Z",
}),
},
},
}));PostgreSQL sequences updating after seed
drizzle-seed iterates through each column in a table, selects columns of type smallint, integer, bigint, smallserial, serial, or bigserial, and (if a sequence exists) updates it to the column’s maximum seeded value.
select setval(pg_get_serial_sequence('"schema_name"."table_name"', 'column_name'), 3, true);Breaking changes
uuid generator was changed and upgraded to v4
await seed(db, { table }).refine((f) => ({
table: {
columns: {
// AA97B177-9383-4934-8543-0F91A7A02836
// ^
// 1
// the digit at position 1 is always one of '8', '9', 'A' or 'B'
column1: f.uuid(),
}
}
}))Reason for upgrade
UUID values generated by the old version of the uuid generator fail Zod’s v4 UUID validation.
example
import { createSelectSchema } from 'drizzle-zod';
import { seed } from 'drizzle-seed';
await seed(db, { uuidTest: schema.uuidTest }, { count: 1 }).refine((funcs) => ({
uuidTest: {
columns: {
col1: funcs.uuid()
}
}
})
);
const uuidSelectSchema = createSelectSchema(schema.uuidTest);
const res = await db.select().from(schema.uuidTest);
// the line below will throw an error when using old version of uuid generator
uuidSelectSchema.parse(res[0]);Usage
await seed(db, schema);
// or explicit
await seed(db, schema, { version: '4' });Switch to the old version
The previous version of uuid generator is v1.
await seed(db, schema, { version: '1' });To use the v2 generators while maintaining the v1 uuid generator:
await seed(db, schema, { version: '2' });To use the v3 generators while maintaining the v1 uuid generator:
await seed(db, schema, { version: '3' });