テーブル数が多いとひとつずつ削除するの面倒だし、外部キー制約があると削除順にも気をつけないといけなかったりしてとても面倒です。PostgreSQLでは一括にPostgreSQLのテーブル、ビュー、プロシージャ、関数を削除する方法をまとめました。
一括削除方法①
すべてのテーブルが同一スキーマにあることが前提で、スキーマごとに DROP する。
実行例:
drop schema test;
create schema test;
drop schema test;
create schema test;
一括削除方法②
コマンドですべてのテーブルを取得し、drop tableコマンドで一括削除できる。この方法がおすすめです。
テーブルを一括削除
psql -d データベース名 -U ユーザ名 -h ホスト名 -c “drop table $(psql -d データベース名 -U ユーザ名 -h ホスト名 -P tuples_only=1 -c ‘\dt’ | cut -d ‘|’ -f 2 |sed ‘/^$/d’ | paste -sd “,” | sed ‘s/ //g’)”
ビューを一括削除
psql -d データベース名 -U ユーザ名 -h ホスト名 -c “drop table $(psql -d データベース名 -U ユーザ名 -h ホスト名 -P tuples_only=1 -c ‘\dv’ | cut -d ‘|’ -f 2 |sed ‘/^$/d’ | paste -sd “,” | sed ‘s/ //g’)”
プロシージャ、関数を一括削除
psql -d データベース名 -U ユーザ名 -h ホスト名 -c “drop table $(psql -d データベース名 -U ユーザ名 -h ホスト名 -P tuples_only=1 -c ‘\df’ | cut -d ‘|’ -f 2 |sed ‘/^$/d’ | paste -sd “,” | sed ‘s/ //g’)”
シーケンスを一括削除
psql -d データベース名 -U ユーザ名 -h ホスト名 -c “drop table $(psql -d データベース名 -U ユーザ名 -h ホスト名 -P tuples_only=1 -c ‘\ds’ | cut -d ‘|’ -f 2 |sed ‘/^$/d’ | paste -sd “,” | sed ‘s/ //g’)”