关于在Drizzle-ORM中创建HASH索引的技术咨询
在Drizzle ORM中创建PostgreSQL HASH索引的正确方式
正确实现代码
你直接写CREATE INDEX的方式不符合Drizzle的Schema规范,推荐用官方提供的index()辅助函数结合using()方法创建HASH索引,既能保证类型安全,也能避免语法错误:
import { pgTable, text, index, sql } from 'drizzle-orm/pg-core'; import { users } from './your-users-schema-file'; export const posts = pgTable( "post", { id: text("id") .primaryKey() .$defaultFn(() => crypto.randomUUID()), authorId: text("authorId") .notNull() .references(() => users.id, { onDelete: "cascade" }), }, (table) => { return { authorIdHashIdx: index("authorIdHashIdx") .on(table.authorId) .using(sql`hash`), }; } );
解答你的疑问
关于文档与示例不符的问题:
Drizzle文档更新可能滞后于代码实现,当前稳定版本(v0.30+)已经支持using()方法指定索引类型,除基础的name和on()参数外,还能通过using()扩展索引访问方法(如hash、gin、gist等)。为什么
using接收SQL语句而非字符串:
设计成接收sql模板字符串是为了兼顾灵活性与类型安全:PostgreSQL的索引访问方法可能需要额外语法(比如GIN索引的gin_trgm_ops算子),用SQL片段可直接传递原生语法,同时Drizzle能对SQL做语法校验,避免纯字符串拼接的错误,也能更好兼容不同数据库的特性差异。
额外修正
你之前的代码存在笔误:"authorIdId"应改为"authorId",否则会因列不存在报错。
内容的提问来源于stack exchange,提问作者Max Xie
相关产品推荐
相关产品推荐

