Database

Serverless Drivers

Connecting to your Postgres database in serverless environments.


Supabase provides several options for connecting to your Postgres database from serverless environments.

supabase-js is an isomorphic JavaScript client that uses the auto-generated REST API and therefore works in any environment that supports HTTPS connections. This API has a built-in connection pooler and can serve thousands of simultaneous requests, and therefore is ideal for Serverless workloads.

Vercel Edge Functions

Vercel's Edge runtime is built on top of the V8 engine, that provides a limited set of Web Standard APIs.

Quickstart

Choose one of these Vercel Deploy Templates which use our Vercel Deploy Integration to automatically configure your connection strings as environment variables on your Vercel project!

Manual configuration

In your Database Settings, make sure Use connection pooler is checked and Transaction mode is selected, then copy the URI and save it as the POSTGRES_URL environment variable. Remember to replace the password placeholder with your actual database password and add the following suffix ?workaround=supabase-pooler.vercel.

.env.local

_10
POSTGRES_URL="postgres://postgres.cfcxynqnhdybqtbhjemm:[YOUR-PASSWORD]@aws-0-ap-southeast-1.pooler.supabase.com:6543/postgres?workaround=supabase-pooler.vercel"

lib/drizzle.ts

_26
import { pgTable, serial, text, timestamp, uniqueIndex } from 'drizzle-orm/pg-core'
_26
import { InferSelectModel, InferInsertModel } from 'drizzle-orm'
_26
import { sql } from '@vercel/postgres'
_26
import { drizzle } from 'drizzle-orm/vercel-postgres'
_26
_26
export const UsersTable = pgTable(
_26
'users',
_26
{
_26
id: serial('id').primaryKey(),
_26
name: text('name').notNull(),
_26
email: text('email').notNull(),
_26
image: text('image').notNull(),
_26
createdAt: timestamp('createdAt').defaultNow().notNull(),
_26
},
_26
(users) => {
_26
return {
_26
uniqueIdx: uniqueIndex('unique_idx').on(users.email),
_26
}
_26
}
_26
)
_26
_26
export type User = InferSelectModel<typeof UsersTable>
_26
export type NewUser = InferInsertModel<typeof UsersTable>
_26
_26
// Connect to Vercel Postgres
_26
export const db = drizzle(sql)

Cloudflare Workers

Cloudflare's Workers runtime also uses the V8 engine but provides polyfills for a subset of Node.js APIs and TCP Sockets API, giving you a couple of options:

Supabase Edge Functions

Supabase Edge Functions uses the Deno runtime which has native support for TCP connections allowing you to choose your favorite client: