PostgreSQL
将 Better Auth 与 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 migratenpx auth@latest generate连接查询(实验性)
当 Better-Auth 需要在单个查询中从多个表获取相关数据时,数据库连接查询非常有用。
类似 /get-session、/get-full-organization 等端点极大地受益于此功能,
根据数据库延迟,性能可提升 2 到 3 倍。
Kysely PostgreSQL 方言自 1.4.0 版本起原生支持连接查询。
要启用此功能,需要在 auth 配置中将 experimental.joins 选项设为 true。
import { betterAuth } from "better-auth";
export const auth = betterAuth({
experimental: { joins: true }
});启用此功能后,可能需要执行数据库迁移。
使用非默认模式
在大多数情况下,默认模式是 public。若希望 Better Auth 使用非默认模式(例如 auth)存放其表,有几种方式:
选项 1:在连接字符串中设置 search_path(推荐)
在连接 URI 后追加 options 参数:
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",
}),
});需要时请进行 URL 编码:?options=-c%20search_path%3Dauth。
选项 2:通过 Pool 配置设置 search_path
import { betterAuth } from "better-auth";
import { Pool } from "pg";
export const auth = betterAuth({
database: new Pool({
host: "localhost",
port: 5432,
user: "postgres",
password: "password",
database: "my-db",
options: "-c search_path=auth",
}),
});选项 3:为数据库用户设置默认模式
设置 PostgreSQL 用户的默认模式:
ALTER USER your_user SET search_path TO auth;设置后需要重新连接以应用更改。
先决条件
使用非默认模式之前,请确保:
-
该模式已存在:
CREATE SCHEMA IF NOT EXISTS auth; -
用户具备相应权限:
GRANT ALL PRIVILEGES ON SCHEMA auth TO your_user; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA auth TO your_user; ALTER DEFAULT PRIVILEGES IN SCHEMA auth GRANT ALL ON TABLES TO your_user;
工作原理
Better Auth CLI 迁移系统会自动检测你配置的 search_path:
- 执行
npx auth migrate时,只检查配置模式中的表 - 其他模式(如
public)中的表会被忽略,避免冲突 - 所有新表都会创建在你指定的模式中
故障排查
问题:迁移时出现 "relation does not exist" 错误
解决方案: 通常表示该模式不存在或用户权限不足。请按上述方式创建模式并授予权限。
验证你的模式配置:
你可以通过查询 search_path 来检查 Better Auth 使用的模式:
SHOW search_path;结果应显示你的自定义模式(例如 auth)为第一个值。
其他信息
PostgreSQL 的支持是通过 Kysely 适配器实现的,Kysely 支持的任何数据库也均受支持。(点击这里了解更多)
如果你在寻求性能提升或优化技巧,可以查看我们的 性能优化指南。