2012-08-22 144 views
3

這似乎是一個非常簡單的問題,但我找不到答案! 如何從postgreSQL控制檯批量刪除視圖?我已經獲得了10,000個視圖,我只是爲了測試某些東西,現在我無法擺脫它們!刪除postgreSql中的所有視圖

+0

你在什麼版本上? – Kuberchaun

+0

其postgres 9.1.4 – samach

回答

5

您可以選擇從元的表,這樣的意見,(實際的選擇可能會有所不同,如果你使用的舊版本,在這裏看到如http://www.alberton.info/postgresql_meta_info.html

SELECT 'DROP VIEW ' || table_name || ';' 
    FROM information_schema.views 
WHERE table_schema NOT IN ('pg_catalog', 'information_schema') 
    AND table_name !~ '^pg_'; 

所以,你選擇根據該修正您的實際版本,運行它,將結果保存到.sql文件中,然後運行.sql文件。

+0

執行後... hw我寫這個到一個sql文件?複製粘貼? – samach

+0

psql - 將命令結果保存到文件http://stackoverflow.com/questions/5331320/psql-save-results-of-command-to-a-file – bpgergo

+0

謝謝。這工作! – samach

2

測試一下,看看它是否有效。我拉這個內存,所以可能有一些語法問題。

BEGIN TRANSACTION; 
    DO $$DECLARE r record; 
     DECLARE s TEXT; 
     BEGIN 
      FOR r IN select table_schema,table_name 
        from information_schema.views 
        where table_schema = 'public' 
      LOOP 
       s := 'DROP VIEW ' || quote_ident(r.table_schema) || '.' || quote_ident(r.table_name) || ';'; 

       EXECUTE s; 

       RAISE NOTICE 's = % ',s; 

      END LOOP; 
     END$$; 
    ROLLBACK TRANSACTION; 
+0

模式名稱將是視圖中的任何一個。 – Kuberchaun

+0

僅供參考此DO語句語法僅在9.x +中。 – Kuberchaun

+0

我認爲justbob有正確的答案。爲了不必每次都這樣做,只需在單獨的'SCHEMA'中創建所有視圖並在使用後刪除此模式就可以以更簡單的方式完成這項工作。 – greg

相關問題