# PostgreSQL (Prisma ORM v7) (/docs/orm/v7/core-concepts/supported-databases/postgresql) > For the complete Prisma documentation index, see [llms.txt](https://www.prisma.io/docs/llms.txt). A markdown version of any docs page is available by appending `.md` to its URL. Use Prisma ORM with PostgreSQL databases including self-hosted, serverless (Neon, Supabase), and CockroachDB Location: ORM > v7 > Core Concepts > Supported databases > PostgreSQL Prisma ORM supports PostgreSQL and PostgreSQL-compatible databases including self-hosted PostgreSQL, serverless providers (Neon, Supabase), and CockroachDB. ## Setup [#setup] Configure the provider in your Prisma schema: ```prisma title="schema.prisma" datasource db { provider = "postgresql" // or "cockroachdb" for CockroachDB } ``` **Self-hosted PostgreSQL:** ```typescript title="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): ```text title=".env" DATABASE_URL="postgres://user:pass@host-pooler:6543/db?pgbouncer=true" DIRECT_URL="postgres://user:pass@host:5432/db" ``` ```typescript title="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 }, }); ``` ## Using driver adapters [#using-driver-adapters] Use JavaScript database drivers via [driver adapters](https://www.prisma.io/docs/orm/v7/core-concepts/supported-databases/database-drivers#driver-adapters): **Standard PostgreSQL with `pg`:** #### bun ```bash bun add @prisma/adapter-pg ``` #### pnpm ```bash pnpm add @prisma/adapter-pg ``` #### yarn ```bash yarn add @prisma/adapter-pg ``` #### npm ```bash npm install @prisma/adapter-pg ``` ```ts 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 }); ``` `DATABASE_URL` has to be set in the process environment when this code runs. Node.js does not read `.env` files on its own, so install `dotenv` and add `import "dotenv/config";` at the top of your entry file, or start Node with its [`--env-file`](https://nodejs.org/api/cli.html#--env-filefile) flag. If the variable is missing, `pg` gets no connection string and falls back to its defaults, and the usual symptom is `SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a string`. **Neon serverless:** #### bun ```bash bun add @prisma/adapter-neon ``` #### pnpm ```bash pnpm add @prisma/adapter-neon ``` #### yarn ```bash yarn add @prisma/adapter-neon ``` #### npm ```bash npm install @prisma/adapter-neon ``` ```ts 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 }); ``` ## Supported variants [#supported-variants] ### Self-hosted PostgreSQL [#self-hosted-postgresql] Standard PostgreSQL server (9.6+). * Connection URL: `postgresql://user:pass@host:5432/database` * Full Prisma Migrate support * Use `prisma migrate dev` for development * TLS/SSL configuration via connection string parameters **Connection string arguments:** | Argument | Default | Description | | ----------------- | -------- | ----------------------------------------------- | | `schema` | `public` | PostgreSQL schema to use | | `connect_timeout` | `5` | Seconds to wait for connection (0 = no timeout) | | `sslmode` | `prefer` | TLS mode: `prefer`, `disable`, `require` | | `sslcert` | | Path to server certificate | | `sslidentity` | | Path to PKCS12 certificate | ### Neon [#neon] Serverless PostgreSQL with automatic scaling and branching. * Connection URL: `postgres://user:pass@host-pooler.region.aws.neon.tech:5432/db` * Add `-pooler` to hostname for connection pooling (PgBouncer, 10k connections) * Compute scales to zero after 5 minutes inactivity * Cold start: 500ms - few seconds * Database branching for development workflows **Timeout configuration:** Configure connection and pool timeouts via your [driver adapter](https://www.prisma.io/docs/orm/v7/prisma-client/setup-and-configuration/databases-connections/connection-pool) (e.g. `connectionTimeoutMillis` for `pg`). **Resources:** [Neon docs](https://neon.tech/docs) • [Connection pooling](https://neon.tech/docs/connect/connection-pooling) ### Supabase [#supabase] PostgreSQL hosting with built-in auth, storage, and real-time features. **Connection types:** * **Direct:** `db.[project-ref].supabase.co:5432` * **Transaction pooler:** Port `6543` with `?pgbouncer=true` * **Session pooler:** Port `5432` on pooler host **Key features:** * Supavisor connection pooling * Built-in PostgreSQL extensions * Integrated with Supabase ecosystem * Automated backups **Resources:** [Supabase docs](https://supabase.com/docs) • [Prisma integration](https://supabase.com/partners/integrations/prisma) ### CockroachDB [#cockroachdb] Distributed, PostgreSQL-compatible database designed for scalability and high availability. * Use `provider = "cockroachdb"` in schema * Connection URL: `postgresql://user:pass@host:26257/database` * Built-in replication and automated failover * Horizontal scaling with no single point of failure **Key differences:** | Feature | PostgreSQL | CockroachDB | | -------------- | ----------------- | ------------------------------------- | | Native types | `VARCHAR(n)` | `STRING(n)` | | ID generation | `autoincrement()` | Uses `unique_rowid()` | | Sequential IDs | Recommended | Avoid (use `autoincrement()` instead) | **ID generation example:** ```prisma model User { id BigInt @id @default(autoincrement()) // Uses unique_rowid() name String } ``` For compatibility with existing databases, use `sequence()`: ```prisma model User { id Int @id @default(sequence()) name String } ``` **Resources:** [CockroachDB docs](https://www.cockroachlabs.com/docs/) • [Primary key best practices](https://www.cockroachlabs.com/docs/stable/schema-design-table#primary-key-best-practices) ## Type mappings [#type-mappings] ### Prisma to PostgreSQL [#prisma-to-postgresql] | Prisma | PostgreSQL | CockroachDB | | ---------- | ------------------ | ----------- | | `String` | `text` | `STRING` | | `Boolean` | `boolean` | `BOOL` | | `Int` | `integer` | `INT4` | | `BigInt` | `bigint` | `INT8` | | `Float` | `double precision` | `FLOAT8` | | `Decimal` | `decimal(65,30)` | `DECIMAL` | | `DateTime` | `timestamp(3)` | `TIMESTAMP` | | `Json` | `jsonb` | `JSONB` | | `Bytes` | `bytea` | `BYTES` | See [full type mapping reference](https://www.prisma.io/docs/orm/v7/reference/prisma-schema-reference#model-field-scalar-types) for complete details. ## Common patterns [#common-patterns] **SSL connections:** ```bash DATABASE_URL="postgresql://user:pass@host:5432/db?sslmode=require&sslcert=./cert.pem" ``` * `sslmode=prefer` (default) - Use TLS if available * `sslmode=require` - Require TLS or fail * `sslmode=disable` - No TLS **Socket connections:** ```bash DATABASE_URL="postgresql://user:pass@localhost/db?host=/var/run/postgresql/" ``` **Specifying schema with driver adapters:** ```ts 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: * **Connection timeout:** `0` (no timeout) vs v6's `5s` * **Idle timeout:** `10s` vs v6's `300s` See [connection pool guide](https://www.prisma.io/docs/orm/v7/prisma-client/setup-and-configuration/databases-connections/connection-pool#postgresql-using-the-pg-driver-adapter) for configuration. ## Related pages - [`Database drivers`](https://www.prisma.io/docs/orm/v7/core-concepts/supported-databases/database-drivers): Learn how Prisma connects to your database using driver adapters - [`MongoDB`](https://www.prisma.io/docs/orm/v7/core-concepts/supported-databases/mongodb): How Prisma ORM connects to MongoDB databases - [`MySQL`](https://www.prisma.io/docs/orm/v7/core-concepts/supported-databases/mysql): Use Prisma ORM with MySQL databases including self-hosted MySQL/MariaDB and serverless PlanetScale - [`SQL Server`](https://www.prisma.io/docs/orm/v7/core-concepts/supported-databases/sql-server): Use Prisma ORM with Microsoft SQL Server databases - [`SQLite`](https://www.prisma.io/docs/orm/v7/core-concepts/supported-databases/sqlite): Use Prisma ORM with SQLite databases including local SQLite, Turso (libSQL), and Cloudflare D1