public
、information_schema
およびそれらを除く、データベース内のすべてのスキーマを削除する必要がありますLIKE 'pg_%'
。
これが私が見つけたものです:(このバリアントは機能していないようです)
CREATE OR REPLACE FUNCTION drop_all ()
RETURNS VOID AS
$$
DECLARE rec RECORD;
BEGIN
-- Get all the schemas
FOR rec IN
SELECT DISTINCT schemaname
FROM pg_catalog.pg_tables
-- You can exclude the schema which you don't want to drop by adding another condition here
WHERE schemaname NOT LIKE 'pg_%' AND schemaname != 'public'
AND schemaname != 'information_schema'
LOOP
EXECUTE 'DROP SCHEMA ' || rec.schemaname || ' CASCADE';
END LOOP;
RETURN;
END;
$$ LANGUAGE plpgsql;
SELECT drop_all();
別のバリアント: (これはおそらく機能しますが、それでもアプリがクラッシュします)
SELECT string_agg(format('DROP SCHEMA %I CASCADE;', nspname), E'\n')
FROM pg_namespace WHERE nspname != 'public'
AND nspname NOT LIKE 'pg_%'
AND nspname != 'information_schema';
そのため、クエリが正しいことを確認するか、できればクエリの別のバリエーションを見つけたいと思いました。
それを行うための別のクエリを見つけるのを手伝ってくれる人はいますか?