# @elysiumjs/mnemosyne-drizzle 中文文档

规范地址：https://npmcn.com/package/%40elysiumjs/mnemosyne-drizzle/

版本：0\.9\.1
npm 元数据更新时间：2026-11-13T03:12:25.126Z
中文译文更新时间：2026-11-13T15:49:48.745Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40elysiumjs/mnemosyne-drizzle
原文对照：https://npmcn.com/package/%40elysiumjs/mnemosyne-drizzle/?lang=original
项目主页：https://github.com/na2axl/elysiumjs/tree/main/@elysiumjs/mnemosyne-drizzle#readme
源码仓库：https://github.com/na2axl/elysiumjs

弃用说明：Replaced by @elysiumjs/drizzle\.

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：142 kB，31 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：3 个
- peer 依赖：pg ^8\.0\.0，postgres ^3\.4\.0，@elysiumjs/core ^0\.24\.1，@elysiumjs/mnemosyne ^0\.8\.1，@elysiumjs/runtime-workers ^0\.1\.13
- 首次发布：2026-02-24T00:19:03.377Z
- 最新版本发布：2026-11-12T01:02:19.702Z
- 近 30 天下载量：3980（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：26（近 12 个月 26 个）

## 中文简介

@elysiumjs/mnemosyne 的 Drizzle ORM 驱动程序

## 安装

```sh
npm install @elysiumjs/mnemosyne-drizzle
```

也可以使用：`pnpm add @elysiumjs/mnemosyne-drizzle`、`yarn add @elysiumjs/mnemosyne-drizzle`、`bun add @elysiumjs/mnemosyne-drizzle`

## README

# @elysiumjs/mnemosyne-细雨

Drizzle ORM 驱动程序 `@elysiumjs/mnemosyne`。 。 。 .

## 安装

```bash
bun add @elysiumjs/mnemosyne-drizzle
```

## 使用量

添加 `DrizzleModule` 您的应用程序。 它宣布这些联系为全球服务,登记租房战略,并提供 `migration:generate` 财务报告和审定财务报表 `migration:run` 命令.

```ts
import { Application } from '@elysiumjs/core';
import { DrizzleModule } from '@elysiumjs/mnemosyne-drizzle';

@Application.register({
    modules: [
        DrizzleModule.with({
            default: 'main',
            connections: {
                main: { connection: process.env.DATABASE_URL! }
            }
        })
    ]
})
export class App extends Application {}
```

`with()` 也接受一个函数,该函数在模块启动时称为: `DrizzleModule.with(() => ({ ... }))`设置 `tenancy` 用于在schema(默认)和RLS租赁之间切换.

用增强的模型定义模式 `pgTable`数字 :

```ts
import { DrizzleModel, DrizzleRepository, pgTable } from '@elysiumjs/mnemosyne-drizzle';
import { uuid, varchar } from 'drizzle-orm/pg-core';

const users = pgTable('users', {
    id: uuid().primaryKey().defaultRandom(),
    name: varchar({ length: 255 }).notNull()
});

export class UserModel extends DrizzleModel(users, { supportTenancy: true }) {}
export class UserRepository extends DrizzleRepository(UserModel) {}
```

寄存器在表的主键旁找到行. 没有桌子 `id` 列,或带有复合主键,将键取为对象; `key` 指定要使用的其他列:

```ts
export class MembershipRepository extends DrizzleRepository(MembershipModel) {}
await memberships.find({ teamId, userId });

export class SessionRepository extends DrizzleRepository(SessionModel, { key: ['token'] }) {}
await sessions.find('abc123');
```

`list(query, scope)` 财务报告和审定财务报表 `count(query, scope)` 在查询的过滤器上, 带一个列必须满足的条件 :

```ts
public listFor(userId: string, query: ParsedQuery<'cursor'>) {
    return this.list(query, eq(posts.authorId, userId));
}
```

### 移徙钩

`migration:run --tenant <name>` 在一次交易中,在每名租户的锁下,适用租户的未决移民。 它的工作是连接由 `--connection` (单位:千美元)`default` 其驱动程序为迁移时: `bun-sql`, (中文(简体) ), `postgres-js` 财务报告和审定财务报表 `node-postgres` 做,还有 `hyperdrive` 把它们交给它包装的驱动器,它需要它的约束。 使用自定义驱动程序运行 `migrations(connection)`,与 `templateClientMigrations()` 或者说 `nodePostgresMigrations()` 这样的客户.

迁移钩在迁移周围运行SQL,在同一交易中:当钩失败时,整个跑道被回滚. 登记在 `@Migration.hook()` 并列出在 `services` 一个模块。 每个方法都是可选的:

```ts
import type { MigrationHook, MigrationRun, MigrationStep } from '@elysiumjs/mnemosyne-drizzle';

import { Migration, sql } from '@elysiumjs/mnemosyne-drizzle';

@Migration.hook()
export class DatabaseHook implements MigrationHook {
    public async before({ db }: MigrationRun) {
        await db.execute(sql`CREATE EXTENSION IF NOT EXISTS pgcrypto`);
    }

    public async beforeEach({ name }: MigrationStep) {}

    public async afterEach({ db, name }: MigrationStep) {
        const [{ count }] = await db.execute<{ count: number }>(
            sql`SELECT count(*)::int AS count FROM pg_constraint WHERE ...`
        );
        if (count > 0) throw new Error(`${name} adds a foreign key across schemas`);
    }

    public async after({ db, tenant }: MigrationRun) {
        await db.execute(sql`GRANT USAGE ON SCHEMA ${sql.identifier(tenant)} TO app`);
    }
}
```

-   `before` 一旦租户计划及移民表存在,就运行 `after` 在结尾。 两者在无移民等待时都会运行,所以 `after` 符合必须保持的状态,例如赠款或分配.
-   `beforeEach` 在每次迁移之前运行 `afterEach` 一旦记录下来.
-   A 类 `MigrationRun` 持有该交易(`db`页:1 `tenant`,则 `connection`,则 `batch`,则 `pending` 移徙和移徙 `applied` 目前为止 A 类 `MigrationStep` 持有交易 `name` 财务报告和审定财务报表 `path` 移徙及其对受难者的影响 `run`。 。 。 .
-   `db.execute(query)` 运行一个与 `sql` drizzle 模板并返回其行. `db.script(text)` 运行一些没有参数的语句.

虎克为每个租户运行,按单元登记顺序排列: `tenant` 只对一些租户采取行动.

### 表格标记

`DrizzleTable.define()` 以什么标记表格 `migration:generate` 增加了造成移徙的移徙。 后迁相如来.

```ts
import { DrizzleTable } from '@elysiumjs/mnemosyne-drizzle';
import { pgSchema, primaryKey, text, timestamp, uuid } from 'drizzle-orm/pg-core';

const kernel = pgSchema('kernel');

export const audit = DrizzleTable.define(
    DrizzleTable.partitioned({ range: 'recorded_at' }),
    DrizzleTable.afterCreate(
        ({ qualified }) =>
            `CREATE TRIGGER audit_append_only BEFORE UPDATE OR DELETE ON ${qualified} FOR EACH ROW EXECUTE FUNCTION forbid_change()`
    )
)(
    kernel.table(
        'audit',
        {
            id: uuid('id').notNull().defaultRandom(),
            action: text('action').notNull(),
            recordedAt: timestamp('recorded_at').notNull().defaultNow()
        },
        (t) => [primaryKey({ columns: [t.id, t.recordedAt] })]
    )
);
```

-   `DrizzleTable.partitioned({ range })` 添加 `PARTITION BY RANGE (...)` 页:1 `CREATE TABLE`。 。 。 . `range` 是数据库中的一列名称,函数返回一列(`(t) => t.recordedAt`),或其中几个. 主要和独特的制约因素必须包括这些栏目.
-   `DrizzleTable.afterCreate(build)` 在表格创建后立即添加 SQL 作为自己的语句. `build` 接收 `schema` (单位:千美元)`undefined` 页:1 `public`页:1 `name` 和所引用的、合格的计谋 `qualified` 名称,并返回字符串或字符串 `sql` 模板.
-   `DrizzleTable.define()` 返回它标记的表格,所以其类型不变。 重新标出一个表格,增加了它的标记.

## 许可证

这个项目根据Apache许可证2.0版本获得许可. 见 [自由主义](https://npmcn.com/package/LICENSE) 需要更多信息的文件.

## 常见问题

### @elysiumjs/mnemosyne-drizzle 是什么？

@elysiumjs/mnemosyne 的 Drizzle ORM 驱动程序注意：该包已被作者标记为弃用——Replaced by @elysiumjs/drizzle\.

### 如何安装 @elysiumjs/mnemosyne-drizzle？

在项目目录运行 npm install @elysiumjs/mnemosyne-drizzle，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：@elysiumjs/core（^0\.24\.1）、@elysiumjs/mnemosyne（^0\.8\.1）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @elysiumjs/mnemosyne-drizzle 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @elysiumjs/mnemosyne-drizzle 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @elysiumjs/mnemosyne-drizzle 可以商用吗？

@elysiumjs/mnemosyne-drizzle 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @elysiumjs/mnemosyne-drizzle 的下载量有多少？

根据 npm 官方下载统计，@elysiumjs/mnemosyne-drizzle 在 2026/10/14 – 2026/11/12 这 30 天内被下载 3,980 次，日均约 133 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @elysiumjs/mnemosyne-drizzle 还在维护吗？

最新版本 0\.9\.1 发布于 2026/11/12（1 天前）；至今共发布 26 个版本，其中过去 12 个月发布了 26 个；首次发布于 2026/02/24。作者已将其标记为弃用，新项目建议寻找替代方案。

