© 2026 Hedgehog Software, LLC

TwitterGitHubDiscord
More
CommunitiesDocsAboutTermsPrivacy
Search
Star
Setup for Free
Drizzle TeamDT
Drizzle Team•12mo ago•
4 replies
Budi

Unexpected behaviour of drizzle-zod createInsertSchema

I have this postgres schema:

export const contractsTable = pgTable('contracts_table', {
    id: integer().primaryKey().generatedByDefaultAsIdentity(),
    title: text().notNull(),
    description: text().notNull(),
    startDate: date().notNull(),
    endDate: date().notNull(),
    noticePeriodUnit: timeIntervals(),
    noticePeriodValue: integer(),
    status: contractStatusEnum().notNull(),
    annualValue: numeric({ precision: 10, scale: 2 }),
    autoRenewing: boolean().notNull().default(true),
    renewalPeriodUnit: timeIntervals(),
    renewalPeriodValue: integer(),
    userId: text()
        .notNull()
        .references(() => usersTable.id, { onDelete: 'cascade' }),
    categoryId: integer().references(() => categoriesTable.id, { onDelete: 'cascade' }),
    notes: text(),
    createdAt: timestamp().notNull().defaultNow(),
    updatedAt: timestamp()
        .notNull()
        .$onUpdate(() => new Date())
})
export const contractsTable = pgTable('contracts_table', {
    id: integer().primaryKey().generatedByDefaultAsIdentity(),
    title: text().notNull(),
    description: text().notNull(),
    startDate: date().notNull(),
    endDate: date().notNull(),
    noticePeriodUnit: timeIntervals(),
    noticePeriodValue: integer(),
    status: contractStatusEnum().notNull(),
    annualValue: numeric({ precision: 10, scale: 2 }),
    autoRenewing: boolean().notNull().default(true),
    renewalPeriodUnit: timeIntervals(),
    renewalPeriodValue: integer(),
    userId: text()
        .notNull()
        .references(() => usersTable.id, { onDelete: 'cascade' }),
    categoryId: integer().references(() => categoriesTable.id, { onDelete: 'cascade' }),
    notes: text(),
    createdAt: timestamp().notNull().defaultNow(),
    updatedAt: timestamp()
        .notNull()
        .$onUpdate(() => new Date())
})


And this insert schema created with the Drizzle Zod extension:

export const contractFormInsertSchema = createInsertSchema(contractsTable)
    .omit({
        userId: true,
        createdAt: true,
        updatedAt: true
    })
    .extend({
        title: z.string().min(1, 'Title is required'),
        description: z.string().min(1, 'Description is required'),
        startDate: z
            .string({ invalid_type_error: 'Start date is required' })
            .min(1, 'Start date is required'),
        endDate: z
            .string({ invalid_type_error: 'End date is required' })
            .min(1, 'End date is required'),
        noticePeriodUnit: timeIntervalEnumSchema,
        noticePeriodValue: z.number().int().positive(),
        autoRenewing: z.boolean(),
        renewalPeriodUnit: timeIntervalEnumSchema,
        renewalPeriodValue: z.number().int().positive(),
        status: contractStatusEnumSchema.default('active'),
        documents: z.array(fileValidationSchema).optional()
    })
export const contractFormInsertSchema = createInsertSchema(contractsTable)
    .omit({
        userId: true,
        createdAt: true,
        updatedAt: true
    })
    .extend({
        title: z.string().min(1, 'Title is required'),
        description: z.string().min(1, 'Description is required'),
        startDate: z
            .string({ invalid_type_error: 'Start date is required' })
            .min(1, 'Start date is required'),
        endDate: z
            .string({ invalid_type_error: 'End date is required' })
            .min(1, 'End date is required'),
        noticePeriodUnit: timeIntervalEnumSchema,
        noticePeriodValue: z.number().int().positive(),
        autoRenewing: z.boolean(),
        renewalPeriodUnit: timeIntervalEnumSchema,
        renewalPeriodValue: z.number().int().positive(),
        status: contractStatusEnumSchema.default('active'),
        documents: z.array(fileValidationSchema).optional()
    })
Drizzle TeamJoin
The official Discord for all Drizzle related projects, such as Drizzle ORM, Drizzle Kit, Drizzle Studio and more!
11,879Members
Resources
Was this page helpful?

Similar Threads

Recent Announcements

Similar Threads

Drizzle-zod createInsertSchema types
Drizzle TeamDTDrizzle Team / help
3y ago
drizzle-zod createInsertSchema gives optional types
Drizzle TeamDTDrizzle Team / help
2y ago
[postgres][zod] createInsertSchema
Drizzle TeamDTDrizzle Team / help
2y ago
[drizzle-zod] createSchemaFactory unexpected behavior
Drizzle TeamDTDrizzle Team / help
2mo ago