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
| numberView on GitHub (pinned to b7862528fd)
Solutions
- Ensure db, schema, and tableName are all passed when insertDataInDb/updateDataInDb is true.
- If you only want generated values without DB writes, explicitly set insertDataInDb: false and updateDataInDb: false.
- 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
- Always pass db and schema to the top-level seed() function.
- When calling generateColumnsValuesByGenerators directly, forward all three params for write mode.
- Set insertDataInDb: false explicitly if you only need generated values.
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
- Can't find meta/_journal.json file
- No fields selected for table "${tableConfig.tsName}" ("${tab
- No fields selected for table "${tableConfig.tsName}" ("${tab
- values() must be called with at least one value
- Insert select error: selected fields are not the same or are
AI-assisted analysis of drizzle-team/drizzle-orm@b7862528fd (2026-08-03).
Data as JSON: /data/errors/7ed34d43fd040c96.json.
Report an issue: GitHub.