drizzle-kit pushを確認無しで実行する
スキーマに記述した構造をDBに反映させるコマンド。実行すると「このSQL発行していい?」と聞かれるので、カーソルキーとかでYesを選んでEnter。ただCIとかでは何も聞かずに実行してくれてOKなので、--force
とか--no-prompt
みたいなオプションが欲しいんだけど見当たらない。自前でどうにかしてDownとEnterを送り込まないといけないのかと思っていたら、Escを押すだけでもスキーマ変更が行われる模様。怖すぎるのできっとバグなんだけど、これを利用して少しサボり、dev用とtest用のDBつくってpushするスクリプトを適当な場所に置いて呼んでいる。
import postgres from 'postgres'; import { execSync } from 'child_process'; import { exit, env } from 'process'; const url = 'postgres://user:password@localhost:5432'; const sql = postgres(url); for (let name of ['myapp_dev', 'myapp_test']) { await sql`CREATE DATABASE ${sql(name)};`.catch(() => {}); // すでにDBがあってもエラーにしない execSync('pnpm run db:push', { env: { DATABASE_URL: `${url}/${name}`, PATH: env.PATH }, input: '\u001b', // ESC }); }