github drizzle-team/drizzle-orm v1.0.0-beta.8

pre-release18 hours ago

drizzle-seed updates

Bug fixes

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' });

Don't miss a new drizzle-orm release

NewReleases is sending notifications on new releases.