# PostgreSQL (/docs/orm/core-concepts/supported-databases/postgresql)

Location: ORM > 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](/orm/core-concepts/supported-databases/database-drivers#driver-adapters):

**Standard PostgreSQL with `pg`:**

  

#### npm

```bash
npm install @prisma/adapter-pg
```

#### pnpm

```bash
pnpm add @prisma/adapter-pg
```

#### yarn

```bash
yarn add @prisma/adapter-pg
```

#### bun

```bash
bun add @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 });
```

**Neon serverless:**

  

#### npm

```bash
npm install @prisma/adapter-neon
```

#### pnpm

```bash
pnpm add @prisma/adapter-neon
```

#### yarn

```bash
yarn add @prisma/adapter-neon
```

#### bun

```bash
bun add @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](/orm/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](/orm/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](/orm/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/core-concepts/supported-databases/database-drivers): Learn how Prisma connects to your database using driver adapters
- [`MongoDB`](https://www.prisma.io/docs/orm/core-concepts/supported-databases/mongodb): How Prisma ORM connects to MongoDB databases
- [`MySQL`](https://www.prisma.io/docs/orm/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/core-concepts/supported-databases/sql-server): Use Prisma ORM with Microsoft SQL Server databases
- [`SQLite`](https://www.prisma.io/docs/orm/core-concepts/supported-databases/sqlite): Use Prisma ORM with SQLite databases including local SQLite, Turso (libSQL), and Cloudflare D1