2012-05-14 60 views
18

我有一個數據庫,其中安裝了一箇舊的PostGIS破碎版本。我想輕鬆刪除數據庫中的所有函數(它們全部來自PostGIS)。有沒有簡單的方法來做到這一點?即使簡單地提取一個函數名稱列表也是可以接受的,因爲我可以做一個大的DROP FUNCTION聲明。從Postgres數據庫中刪除所有功能

回答

25

一個fine answer to this question can be found here

SELECT 'DROP FUNCTION ' || ns.nspname || '.' || proname 
     || '(' || oidvectortypes(proargtypes) || ');' 
FROM pg_proc INNER JOIN pg_namespace ns ON (pg_proc.pronamespace = ns.oid) 
WHERE ns.nspname = 'my_messed_up_schema' order by proname; 
+1

很多時候,'ms.nspname ='public''適用。 – Drux

+0

上述SQL將以非小寫或不包含字母數字函數/模式名稱的方式失敗。更好地使用quote_ident或format('DROP FUNCTION%I.%I(%s);',nspname,proname,oidvectortypes(proargtypes))來正確引用SQL標識符。 –

3

就像有一個postgis.sql enabler install script,還有一個uninstall_postgis.sql卸載腳本。

psql -d [yourdatabase] -f /path/to/uninstall_postgis.sql 

警告:準備好看到您的幾何/地理列和數據消失!