環境
以下の環境で確認しました。
- drizzle-orm: 0.38.4
- drizzle-kit: 0.30.2
状況
特定のテーブルを Drizzle ORM の管理対象から外す方法を調べました。
具体的には PostgreSQL の pgvector を利用してる状況で、LangChain の PGVector
が作成した langchain_pg_collection
テーブルと langchain_pg_embedding
テーブルが、Drizzle ORM の管理してるデータベースの同じスキーマに存在していました。
その状況で npm drizzle-kit push
を実行すると、Drizzle ORM の schema ファイルに上記テーブルが存在しないため、このテーブルを削除しようとします。
drizzle.config.ts
の設定
drizzle.config.ts
で、tablesFilter
にテーブル名を指定する際、テーブル名の前に !
を付けることで、そのテーブルを Drizzle ORM の管理対象から除外することができます。
具体的には、以下のように設定します。
ワイルドカードを使用できるので langchain_pg_*
とすることで、langchain_pg_collection
と langchain_pg_embedding
を管理対象から外すこともできます。
import "dotenv/config";
import { defineConfig } from "drizzle-kit";
import { env } from "./src/env";
export default defineConfig({
out: "./drizzle",
schema: "./src/db/schema.ts",
dialect: "postgresql",
dbCredentials: {
url: env.DATABASE_URL,
},
tablesFilter: ["!langchain_pg_collection", "!langchain_pg_embedding"],
});
drizzle の公式ドキュメントには、tablesFilter
についての記載はありますが、!
をつけることで、管理対象から外すことができるという記載は見つけられませんでした。
GitHub の Discussions で、この方法を書いている方がいましたので参考にしました。
そのほかの方法
Drizzle ORM 管理したくないテーブルは、別のスキーマに配置するという方法もあります。