本页还没有译文
本页 22 段还没译成한국어,下面显示的是英文原文。Serverless drivers
还没翻译译自英文(supabase.com)本页 22 段都还没译
Learn how to connect to your Postgres database from a serverless environment. The driver you use depends on which runtime your code runs in.
supabase-js is an isomorphic JavaScript client that uses the auto-generated REST API, so it works in any environment that supports HTTPS connections. This API has a built-in connection pooler and can serve thousands of simultaneous requests, which suits serverless workloads.
If you connect with a Postgres client instead, use the shared pooler in transaction mode, then configure your client for pool size, prepared statements, and SSL. Those three settings are what most serverless connection problems come down to.
Vercel Edge Functions
Vercel's Edge runtime runs on the V8 engine and exposes a limited set of Web Standard APIs.
Start from a deploy template, or configure the connection yourself.
Quickstart
Choose one of these Vercel Deploy Templates. They use the Vercel Deploy Integration to configure your connection strings as environment variables on your Vercel project.
A Next.js App Router template configured with cookie-based auth using Supabase, TypeScript and Tailwind CSS.
Basic Next.js template that uses Supabase as the database and Kysely as the query builder.
Manual configuration
- In the Supabase Dashboard, click Connect and copy the URI from the Transaction pooler section.
- Replace the password placeholder with your database password.
- Add the suffix
?workaround=supabase-pooler.vercelto the URI. - Save the result as the
POSTGRES_URLenvironment variable.
POSTGRES_URL="postgresql://postgres.[PROJECT-REF]:[YOUR-PASSWORD]@[POOLER-HOST]:6543/postgres?workaround=supabase-pooler.vercel"import { sql } from '@vercel/postgres'
import { InferInsertModel, InferSelectModel } from 'drizzle-orm'
import { pgTable, serial, text, timestamp, uniqueIndex } from 'drizzle-orm/pg-core'
import { drizzle } from 'drizzle-orm/vercel-postgres'
export const UsersTable = pgTable(
'users',
{
id: serial('id').primaryKey(),
name: text('name').notNull(),
email: text('email').notNull(),
image: text('image').notNull(),
createdAt: timestamp('createdAt').defaultNow().notNull(),
},
(users) => {
return {
uniqueIdx: uniqueIndex('unique_idx').on(users.email),
}
}
)
export type User = InferSelectModel<typeof UsersTable>
export type NewUser = InferInsertModel<typeof UsersTable>
// Connect to Vercel Postgres
export const db = drizzle(sql)import { createKysely } from '@vercel/postgres-kysely'
import { ColumnType, Generated } from 'kysely'
interface UserTable {
// Columns that are generated by the database should be marked
// using the `Generated` type. This way they are automatically
// made optional in inserts and updates.
id: Generated<number>
name: string
email: string
image: string
// You can specify a different type for each operation (select, insert and
// update) using the `ColumnType<SelectType, InsertType, UpdateType>`
// wrapper. Here we define a column `createdAt` that is selected as
// a `Date`, can optionally be provided as a `string` in inserts and
// can never be updated:
createdAt: ColumnType<Date, string | undefined, never>
}
// Keys of this interface are table names.
export interface Database {
users: UserTable
}
export const db = createKysely<Database>()
export { sql } from 'kysely'Cloudflare Workers
Cloudflare's Workers runtime also uses the V8 engine, but it provides polyfills for a subset of Node.js APIs and the TCP Sockets API. That gives you three options:
Drivers [#cloudflare-workers-drivers]
Supabase Edge Functions
Supabase Edge Functions use the Deno runtime, which has native support for TCP connections. You can choose any of these clients: