You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:18:30