前綴

2016-07-19 126 views
0

刪除模式我想刪除與開始「U_」,由於某種原因,數據庫中的所有的模式,我不斷收到了創建每當我試圖創建和修改表pgSQL的 200架構。前綴

我嘗試使用

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

修正了反斜線;感謝讚美。 –