rembrembdocs

Supported databases

Use Prisma ORM with PostgreSQL databases including self-hosted, serverless (Neon, Supabase), and CockroachDB

Prisma ORM supports PostgreSQL and PostgreSQL-compatible databases including self-hosted PostgreSQL, serverless providers (Neon, Supabase), and CockroachDB.

Configure the provider in your Prisma schema:

schema.prisma

datasource db {
  provider = "postgresql" // or "cockroachdb" for CockroachDB
}

Self-hosted PostgreSQL:

prisma.config.ts

import { defineConfig, env } from "prisma/config";

export default defineConfig({
  schema: "prisma/schema.prisma",
  datasource: {
    url: env("DATABASE_URL"), // postgres://user:pass@host:5432/db
  },
});

Serverless (Neon/Supabase):

Use separate URLs for CLI (direct) and runtime (pooled):

.env

DATABASE_URL="postgres://user:pass@host-pooler:6543/db?pgbouncer=true"
DIRECT_URL="postgres://user:pass@host:5432/db"

prisma.config.ts

import { defineConfig, env } from "prisma/config";

export default defineConfig({
  schema: "prisma/schema.prisma",
  datasource: {
    url: env("DIRECT_URL"), // CLI uses direct connection
  },
});

Use JavaScript database drivers via driver adapters:

Standard PostgreSQL with pg:

import { PrismaPg } from "@prisma/adapter-pg";
import { PrismaClient } from "./generated/prisma";

const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL });
const prisma = new PrismaClient({ adapter });

Neon serverless:

import { PrismaNeon } from "@prisma/adapter-neon";
import { PrismaClient } from "./generated/prisma";

const adapter = new PrismaNeon({ connectionString: process.env.DATABASE_URL });
const prisma = new PrismaClient({ adapter });

Self-hosted PostgreSQL

Standard PostgreSQL server (9.6+).

Connection string arguments:

ArgumentDefaultDescription
schemapublicPostgreSQL schema to use
connect_timeout5Seconds to wait for connection (0 = no timeout)
sslmodepreferTLS mode: prefer, disable, require
sslcertPath to server certificate
sslidentityPath to PKCS12 certificate

Neon

Serverless PostgreSQL with automatic scaling and branching.

Timeout configuration: Configure connection and pool timeouts via your driver adapter (e.g. connectionTimeoutMillis for pg).

Resources: Neon docsConnection pooling

Supabase

PostgreSQL hosting with built-in auth, storage, and real-time features.

Connection types:

Key features:

Resources: Supabase docsPrisma integration

CockroachDB

Distributed, PostgreSQL-compatible database designed for scalability and high availability.

Key differences:

FeaturePostgreSQLCockroachDB
Native typesVARCHAR(n)STRING(n)
ID generationautoincrement()Uses unique_rowid()
Sequential IDsRecommendedAvoid (use autoincrement() instead)

ID generation example:

model User {
  id   BigInt @id @default(autoincrement()) // Uses unique_rowid()
  name String
}

For compatibility with existing databases, use sequence():

model User {
  id   Int    @id @default(sequence())
  name String
}

Resources: CockroachDB docsPrimary key best practices

Prisma to PostgreSQL

PrismaPostgreSQLCockroachDB
StringtextSTRING
BooleanbooleanBOOL
IntintegerINT4
BigIntbigintINT8
Floatdouble precisionFLOAT8
Decimaldecimal(65,30)DECIMAL
DateTimetimestamp(3)TIMESTAMP
JsonjsonbJSONB
BytesbyteaBYTES

See full type mapping reference for complete details.

SSL connections:

DATABASE_URL="postgresql://user:pass@host:5432/db?sslmode=require&sslcert=./cert.pem"

Socket connections:

DATABASE_URL="postgresql://user:pass@localhost/db?host=/var/run/postgresql/"

Specifying schema with driver adapters:

const adapter = new PrismaPg(
  { connectionString: process.env.DATABASE_URL },
  { schema: "mySchema" }
);

Connection pool defaults (Prisma ORM v7):

Driver adapters use pg defaults which differ from v6:

See connection pool guide for configuration.