Map SQL DEFAULT Clauses to Prisma @default Attributes

Learn how SQL DEFAULT expressions — literals, NOW(), sequences, and database functions — map to Prisma @default(), @default(autoincrement()), @default(now()), and @default(dbgenerated()).

Advanced Features

Detailed Explanation

Default Values in Prisma

SQL DEFAULT clauses set initial values for columns when no explicit value is provided during INSERT. Prisma supports several built-in default functions and a fallback for arbitrary database expressions.

Example SQL

CREATE TABLE articles (
  id SERIAL PRIMARY KEY,
  uuid UUID NOT NULL DEFAULT gen_random_uuid(),
  title VARCHAR(255) NOT NULL,
  status VARCHAR(20) NOT NULL DEFAULT 'draft',
  view_count INTEGER NOT NULL DEFAULT 0,
  is_featured BOOLEAN NOT NULL DEFAULT false,
  rating DECIMAL(3, 2) NOT NULL DEFAULT 0.00,
  published_at TIMESTAMPTZ,
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
);

Generated Prisma Schema

model Article {
  id          Int       @id @default(autoincrement())
  uuid        String    @default(uuid()) @db.Uuid
  title       String
  status      String    @default("draft") @db.VarChar(20)
  viewCount   Int       @default(0) @map("view_count")
  isFeatured  Boolean   @default(false) @map("is_featured")
  rating      Decimal   @default(0.00) @db.Decimal(3, 2)
  publishedAt DateTime? @map("published_at") @db.Timestamptz()
  createdAt   DateTime  @default(now()) @map("created_at") @db.Timestamptz()
  updatedAt   DateTime  @updatedAt @map("updated_at") @db.Timestamptz()

  @@map("articles")
}

Default Mapping Table

SQL default Prisma default
Literal string ('draft') @default("draft")
Literal number (0, 1.5) @default(0), @default(1.5)
true / false @default(true), @default(false)
NOW() / CURRENT_TIMESTAMP @default(now())
SERIAL / AUTO_INCREMENT @default(autoincrement())
gen_random_uuid() @default(uuid())
Other DB functions @default(dbgenerated("..."))

Prisma Built-in Functions

Prisma provides four built-in default functions:

  1. autoincrement() — maps to SERIAL, AUTO_INCREMENT, IDENTITY
  2. now() — maps to NOW(), CURRENT_TIMESTAMP, GETDATE()
  3. uuid() — generates UUID v4 at the Prisma level
  4. cuid() — generates CUID at the Prisma level

The dbgenerated() Escape Hatch

For database-specific defaults not covered by Prisma's built-in functions, use dbgenerated():

// PostgreSQL array default
tags String[] @default(dbgenerated("'{}'::text[]"))

// PostGIS geometry default
location Unsupported("geometry") @default(dbgenerated("ST_GeomFromText('POINT(0 0)')"))

// MySQL UUID function
id String @default(dbgenerated("(UUID())"))

@updatedAt vs DEFAULT NOW()

Both created_at and updated_at in SQL often have DEFAULT NOW(). Prisma uses:

  • @default(now()) for created_at — set once at creation
  • @updatedAt for updated_at — automatically updated by Prisma client on every save

The converter detects common column names (updated_at, modified_at) and applies @updatedAt instead of @default(now()).

Enum Defaults

When a column with an enum type has a default:

status user_status NOT NULL DEFAULT 'active'

Prisma maps this to the enum value directly:

status UserStatus @default(active)

Note that enum defaults in Prisma use the enum value without quotes.

Use Case

Your SQL schema uses a variety of default expressions — literal values, NOW() for timestamps, gen_random_uuid() for UUIDs, and SERIAL for auto-increment. The converter maps each to the appropriate Prisma @default function or falls back to dbgenerated().

Try It — SQL to Prisma Schema

Open full tool