0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

テスト用に作った大量のDBを一気に消す方法

Last updated at Posted at 2020-12-09

はじめに

テストする際は毎回、スキーマ情報から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"
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?