2016-07-19 7 views
0

Я хочу, чтобы удалить все схемы в базе данных, которая начинается с «и-», по какой-то причине, я получаю более 200 схемы, созданной, когда я пытаюсь создать и модифицировать таблицы в PGSQL.Удалять схемы с префиксом

Я попытался с помощью

drop schema u_* cascade; 

, но я не думаю, что групповые символы работают так (получите код ошибки синтаксиса здесь). Я знаю, что могу получить все имена схем через

select schema_name 
from information_schema.schemata; 

но оттуда я не знаю, что делать. Я просто хочу удалить всю схему, которая либо пуста, либо начнется с «u_».

ответ

0

Это утверждение будет отбрасывать все схемы, чьи имена начинаются с u_ и их содержание:

DO $$DECLARE 
    s text; 
BEGIN 
    FOR s IN 
     SELECT nspname FROM pg_namespace 
     WHERE nspname LIKE 'u\_%' 
    LOOP 
     EXECUTE 'DROP SCHEMA "' || quote_ident(s) || '" CASCADE'; 
    END LOOP; 
END;$$; 

удалить все пустые схемы, используйте

DO $$DECLARE 
    s text; 
BEGIN 
    FOR s IN 
     SELECT nspname FROM pg_namespace 
     WHERE nspname NOT LIKE 'pg_%' AND nspname <> 'public' 
    LOOP 
     BEGIN 
     EXECUTE 'DROP SCHEMA "' || quote_ident(s) || '"'; 
     EXCEPTION 
     WHEN OTHERS THEN 
      NULL; 
     END; 
    END LOOP; 
END;$$; 

Но если бы я тебя, я бы понять что создает эти схемы и останавливает их. PostgreSQL не делает этого сам по себе.

+0

Привет, человек, спасибо большое :) Да, я подумал где-то в своем коде, я, вероятно, создаю все эти схемы, это всего лишь временное решение, прежде чем я исправлю настоящую проблему. Единственная икота, которую я имел, была с 'LIKE 'u \ _%'', чтобы избежать символа '_'. Мне нравится, как ваш код легко читается. –

+0

Исправлена ​​обратная косая черта; спасибо за похвалу. –