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


10

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

回答:


17

CASCADEオプションを使用したいDROP SCHEMAドキュメントから:

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()すべてのテーブルを別のスキーマにドロップする場合は変更してください。


DROP SCHEMA schemaname CASCADEを使用すると、エラーERRORが発生します: "DROP"行またはその近くの構文エラー2:DROPスキーマ
asalthangam

2
LINE 2?1行目は何ですか。
Philᵀᴹ

実際には、すべてのテーブルとその依存オブジェクトを削除する必要があります。それは、削除手順と、すべての..いけない
asalthangam

しかし、スキーマの削除コマンドを使用すると、スキーマも削除されます。私の場合、スキーマが存在する必要があります
asalthangam

@asalthangamの答えは更新
Philᵀᴹ

3
yourdb=# DROP SCHEMA *schema_name* CASCADE;

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


1

@Techno Savvy

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

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

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


問題は、特定のスキーマのテーブルを削除することでした。
mustaccio 2018

-2

これを行うための本当に簡単な方法が必要な場合は、これまでに使用したスクリプトを示します。

select 'drop table '||table_name||' cascade constraints;' from user_tables;

これにより、スキーマ内のすべてのテーブルの一連のドロップコマンドが出力されます。このクエリの結果をスプールして実行します。

同様に、テーブルより多くをクリアしたい場合は、ニーズに合わせて以下を編集できます

select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')

ソース:https : //forums.oracle.com/forums/thread.jspa?threadID=614090


3
問題はOracleではなくPostgresです。
フィロ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.