mmag

ハマったことメモなど

drizzle-kit pushを確認無しで実行する

orm.drizzle.team

スキーマに記述した構造を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
  });
}