drizzle-team/drizzle-orm · error · Error

db or schema or tableName is undefined.

Error message

db or schema or tableName is undefined.

What it means

generateColumnsValuesByGenerators accepts optional db, schema, and tableName parameters because it can run in a 'generate-only' mode (returning values without writing to the DB). When insertDataInDb or updateDataInDb is true, all three are required to perform the write. If any is undefined under those conditions, it throws.

Source

Thrown at drizzle-seed/src/services/SeedService.ts:1436

		if (is(db, PgDatabase<any>)) {
			// @ts-ignore
			maxParametersNumber = db.constructor[entityKind] === 'PgliteDatabase'
				? this.postgresPgLiteMaxParametersNumber
				: this.postgresMaxParametersNumber;
		} else if (is(db, MySqlDatabase<any, any>)) {
			maxParametersNumber = this.mysqlMaxParametersNumber;
		} else {
			// is(db, BaseSQLiteDatabase<any, any>)
			maxParametersNumber = this.sqliteMaxParametersNumber;
		}
		const maxBatchSize = Math.floor(maxParametersNumber / columnsNumber);
		batchSize = batchSize > maxBatchSize ? maxBatchSize : batchSize;

		if (
			(insertDataInDb === true || updateDataInDb === true)
			&& (db === undefined || schema === undefined || tableName === undefined)
		) {
			throw new Error('db or schema or tableName is undefined.');
		}

		let row: { [columnName: string]: string | number | boolean },
			generatedValue,
			i: number;

		for (i = 0; i < count; i++) {
			row = {};
			generatedValues.push(row);

			for (const columnName of Object.keys(columnsGenerators)) {
				// generatedValue = columnsGenerators[columnName].next().value as
				//   | string
				//   | number
				//   | boolean;
				generatedValue = columnsGenerators[columnName]!.generate({ i }) as
					| string
					| number

View on GitHub (pinned to b7862528fd)

Solutions

  1. Ensure db, schema, and tableName are all passed when insertDataInDb/updateDataInDb is true.
  2. If you only want generated values without DB writes, explicitly set insertDataInDb: false and updateDataInDb: false.
  3. When using the high-level seed() function, make sure both the db instance and the schema object are provided.

Example fix

// before — missing db/schema when inserting
await seedService.generateColumnsValuesByGenerators({
  tableGenerators, tableName: 'users', count: 10, // db & schema omitted
});
// after — provide all three for DB writes
await seedService.generateColumnsValuesByGenerators({
  tableGenerators, db, schema, tableName: 'users', count: 10,
});
Defensive patterns

Strategy: validation

Validate before calling

function validateSeedWriteParams(opts: {
  insertDataInDb?: boolean;
  updateDataInDb?: boolean;
  db?: unknown;
  schema?: unknown;
  tableName?: string;
}): string | null {
  const willWrite = opts.insertDataInDb !== false || opts.updateDataInDb === true;
  if (willWrite && (opts.db === undefined || opts.schema === undefined || opts.tableName === undefined)) {
    return 'db, schema, and tableName are all required when inserting or updating data in the DB.';
  }
  return null;
}

Prevention

When it happens

Trigger: Calling the seeder with insertDataInDb: true (the default) or updateDataInDb: true but not passing a db connection, a schema object, or a tableName; or a programmatic caller of generateColumnsValuesByGenerators that forgot to forward one of the three.

Common situations: Using drizzle-seed programmatically (not via the top-level seed() wrapper) and omitting the db or schema argument; conditionally passing db only in some code paths.

Related errors


AI-assisted analysis of drizzle-team/drizzle-orm@b7862528fd (2026-08-03). Data as JSON: /data/errors/7ed34d43fd040c96.json. Report an issue: GitHub.