You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Drizzle ORM连接PostgreSQL时指定非public数据库Schema?

如何在Drizzle ORM连接PostgreSQL时指定非public数据库Schema?

我之前也踩过这个坑,不得不说Drizzle官方文档里这块确实讲得不够明确,而且一搜"schema"全是关于TypeScript表结构定义的内容,完全找不到连接数据库时指定物理schema的方法,给你分享两个亲测有效的解决办法:

方法一:在连接配置中直接指定search_path

这是最稳妥的方式,避开连接字符串参数的坑。因为Drizzle底层用的是pg驱动,我们可以在创建连接池的时候直接配置searchPath参数,代码示例如下:

import { drizzle } from 'drizzle-orm/node-postgres';
import { Pool } from 'pg';

// 创建连接池时指定默认schema
const pool = new Pool({
  connectionString: 'postgres://localhost:5432/mydatabase',
  searchPath: ['myschema'], // 这里填你的自定义schema名称
});

// 初始化Drizzle实例
const db = drizzle(pool);

这样配置后,所有的数据库操作都会默认使用myschema,不用在每个查询前手动加schema前缀,彻底解决默认用public的问题。

方法二:修正连接字符串的参数名

如果你更倾向于用连接字符串配置,要注意正确的参数名是search_path(带下划线),你之前试的searchpath(无下划线)或者currentSchema都不是pg驱动认可的参数名。正确的连接字符串格式应该是:

postgres://localhost:5432/mydatabase?search_path=myschema

用这个连接字符串初始化Drizzle,也能让连接默认指向你的自定义schema。

另外补充一句:PostgreSQL官方确实不推荐默认使用public schema,一来不符合SQL标准,二来在权限管控上容易出现疏漏,所以用自定义schema是更规范的做法,你这个思路完全没问题。

内容来源于stack exchange

火山引擎 最新活动