PostgreSQL
将 Better Auth 与 PostgreSQL 集成。
PostgreSQL 是一个功能强大的开源关系型数据库管理系统,以其高级特性、可扩展性以及对复杂查询和大型数据集的支持而闻名。 阅读更多关于 PostgreSQL 的信息。
示例用法
确保你已安装并配置好 PostgreSQL。 然后,你可以直接将其连接到 Better Auth。
import { betterAuth } from "better-auth";
import { Pool } from "pg";
export const auth = betterAuth({
database: new Pool({
connectionString: "postgres://user:password@localhost:5432/database",
}),
});更多信息请阅读 Kysely 关于 PostgresDialect 的文档。
模式生成与迁移
Better Auth CLI 允许你根据 Better Auth 的配置和插件生成或迁移数据库模式。
PostgreSQL 模式生成 | PostgreSQL 模式迁移 |
|---|---|
| ✅ 支持 | ✅ 支持 |
npx auth@latest migrate连接
当 Better-Auth 需要在一条查询中从多个表获取相关数据时,数据库连接非常有用。
/get-session、/get-full-organization 等端点都能从这一功能中获益,
根据数据库延迟的不同,性能提升最高可达 2 倍至 3 倍。
Kysely PostgreSQL 方言自 1.4.0 版本起即可开箱支持连接。
要启用此功能,请在认证配置中将 advanced.database.joins 设置为 true。
import { betterAuth } from "better-auth";
export const auth = betterAuth({
advanced: {
database: {
joins: true,
},
},
});使用非默认模式
PostgreSQL 默认使用 public 模式。你可以通过 database.schemaName 显式选择其他模式,或配置 PostgreSQL 的 search_path。
如果两者都已配置,Better Auth 将使用 database.schemaName。其他未限定模式的查询仍会使用连接的 search_path。
设置 database.schemaName
import { betterAuth } from "better-auth";
import { PostgresDialect } from "kysely";
import { Pool } from "pg";
export const auth = betterAuth({
database: {
dialect: new PostgresDialect({
pool: new Pool({
connectionString: "postgres://user:password@localhost:5432/database",
}),
}),
type: "postgres",
schemaName: "auth",
},
});该模式适用于运行时查询和 CLI 迁移。npx auth@latest migrate 会在需要时创建该模式,并忽略其他模式中同名的表。
npx auth@latest generate 会先创建模式,再开始生成迁移:
create schema if not exists "auth";后续所有语句都会使用带模式限定的表名,例如 "auth"."user"。
Better Auth 使用的 PostgreSQL 角色必须能够创建该模式及其中的表。否则,请在运行 npx auth@latest migrate 前创建该模式并向该角色授予访问权限。
设置 search_path
直接传入 pg.Pool 时,或者希望连接上的所有未限定模式的查询都使用同一模式时,请改用 PostgreSQL 的 search_path。
使用 search_path 时,Better Auth CLI 要求该模式已存在。运行 npx auth@latest migrate 前,请创建该模式并向连接角色授予访问权限。
import { betterAuth } from "better-auth";
import { Pool } from "pg";
export const auth = betterAuth({
database: new Pool({
connectionString: "postgres://user:password@localhost:5432/database",
options: "-c search_path=auth",
}),
});要将该模式设为 PostgreSQL 角色连接到特定数据库时的默认模式:
ALTER ROLE your_role IN DATABASE your_database
SET search_path TO auth;更改此默认值后,请重新连接。运行 SHOW search_path 以验证当前值。
其他信息
PostgreSQL 的支持是通过 Kysely 适配器实现的,Kysely 支持的任何数据库也均受支持。(点击这里了解更多)
如果你在寻求性能提升或优化技巧,可以查看我们的 性能优化指南。