はじめに
テストする際は毎回、スキーマ情報からDBを新しく作って、確認してる。
なので、ローカルの開発環境に大量のDBが作成される。
名前はdevelopment01234566789みたいな感じで名前+文字列にしてる。
GUIツールでポチポチ消してたけどめんどくさくなったので、スクリプトを書いた。
コード
こんな感じ。.
をつけることで、development
は消えないようにした。
ちなみに、はじめecho
だけで期待通り動くことを確認してから、ためした。
rm_dbs.sh
#!/bin/bash
psql -c "SELECT datname FROM pg_database;" | grep development. | while read line
do
echo $line
dropdb $line
done
実行
chmod 744 rm_dbs.sh
./rm_dbs.sh
おわりに
すっきり消せるようになった。いい感じ。
シェル芸に入門すればワンライナーでかけるようになれるんかな。
沼な感じするから踏み入れたくないけども。
追記
DBのコンテナに入るのもめんどくさいので、ローカルから実行する方法も見つけた。
パイプつかって、やる方法を最初ためしてたけど、うまくいかなかった。標準出力とかがどうなってるかをしっかり理解しないと無理っぽい。
docker-compose -f docker-compose.db.yml exec db psql -c 'SELECT datname FROM pg_database;' | grep acall_development.. >db.list
cat db.list
IFS=$'\r\n'; file=(`cat "db.list"`); for line in "${file[@]}"; do docker-compose -f docker-compose.db.yml exec -T db sh -c "dropdb $${line}"; done
rm db.list
Makefileもいけた。$
でエスケープ。
rm-db:
docker-compose -f docker-compose.db.yml exec db psql -c 'SELECT datname FROM pg_database;' | grep acall_development.. >db.list
cat db.list
IFS=$$'\r\n'; file=(`cat "db.list"`); for line in "$${file[@]}"; do docker-compose -f docker-compose.db.yml exec -T db sh -c "dropdb $${line}"; done
rm db.list
駄目やった方法
↓↓↓
docker-compose -f docker-compose.db.yml exec -T db sh -c "psql -c 'SELECT datname FROM pg_database;' | grep acall_development. | while read line; do echo $line; done"