⚡
ローカルのD1をDrizzle Studioで開く
現バージョンではCloudflareのD1でDrizzle Studioを開こうとすると以下のようなエラーが発生します。
ちなみにDrizzle Studioとはこちらのことです。
Error: 7003: Could not route to /client/v4/accounts/account-id/d1/database/database-id/query, perhaps your object identifier is invalid?
at _ (https://local.drizzle.studio/index.js:14123:33353)
at async https://local.drizzle.studio/index.js:14123:33544
at async Promise.all (index 2)
at async gri (https://local.drizzle.studio/index.js:14060:1111)
at async ykl (https://local.drizzle.studio/index.js:14123:33525)
対処法
ローカル用のファイルを別に作成して、Drizzle Studioを開くようにしました。
$ drizzle-kit studio --config drizzle.config.local.ts
drizzle-kit: v0.22.8
drizzle-orm: v0.31.4
Custom config path was provided, using 'drizzle.config.local.ts'
Reading config file 'C:\Users\m\Documents\hascii\api\drizzle.config.local.ts'
もし以下のようなエラーが出たら'@libsql/client'をインストールします。
Please install either 'better-sqlite3' or '@libsql/client' for Drizzle Kit to connect to SQLite databases
error: script "studio" exited with code 1
こんな感じです。
$ bun i @libsql/client -D
ローカル用の設定ファイルはこのようにしました。
import type { Config } from "drizzle-kit"
import { readdirSync } from "node:fs"
const fileNames = readdirSync(
".wrangler/state/v3/d1/miniflare-D1DatabaseObject",
)
const fileName = fileNames.find((fileName) => {
return fileName.endsWith(".sqlite")
})
if (fileName === undefined) {
throw new Error("No sqlite file found")
}
/**
* $ bun drizzle-kit studio --config drizzle.config.local.ts
*/
export default {
dialect: "sqlite",
schema: "drizzle.schema.ts",
out: "migrations",
dbCredentials: {
url: `.wrangler/state/v3/d1/miniflare-D1DatabaseObject/${fileName}`,
},
} satisfies Config
おまけ
リレーションが不足しているとこのようなエラーがでます。schemaを修正してからもう一度実行します。
Error: There is not enough information to infer relation "__public__.posts.likes"
at https://local.drizzle.studio/index.js:14120:428
at async ykl (https://local.drizzle.studio/index.js:14123:32387)
Discussion