web-dev-qa-db-ja.com

コマンドを使用してスキーマ内のすべてのテーブルを削除する方法をpostgres

私はpostgresqlを使用しており、スキーマに存在するすべてのテーブルを削除する必要があります。コマンドプロンプトから削除するにはどうすればよいですか。

10
asalthangam

_DROP SCHEMA_のCASCADEオプションを使用したい。 ドキュメント から:

CASCADE-スキーマに含まれているオブジェクト(テーブル、関数など)を自動的に削除し、それらのオブジェクトに依存するすべてのオブジェクト

注意してください-私よりも強調します。

もちろん、後でスキーマを再作成する必要があります。

現在のスキーマのすべてのテーブルを削除するには、次のスクリプトを使用できます。

_DO $$ DECLARE
    tabname RECORD;
BEGIN
    FOR tabname IN (SELECT tablename 
                    FROM pg_tables 
                    WHERE schemaname = current_schema()) 
LOOP
    EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(tabname.tablename) || ' CASCADE';
END LOOP;
END $$;
_

別のスキーマのすべてのテーブルを削除する場合は、WHERE schemaname = current_schema()を変更します。

17
Philᵀᴹ
yourdb=# DROP SCHEMA *schema_name* CASCADE;

(動作しますが、Postgresql 9.6.3でテストしただけで、以前のリリースでは動作しない場合があります)

3
comte

@Techno Savvy

Postgres構文を使用してテーブルを削除します。

select '-- drop table ' || tablename || ' cascade;' from pg_tables 
where tablename not like 'pg%' and tablename not like 'sql%';

結果のテキストをsqlスクリプトまたはpsqlターミナルにコピーします。コマンドはコメント化されていることに注意してください。

1
vinh