1
爲了從pgdump恢復我的數據我需要從數據庫中刪除自定義函數。
此功能識別它們得好:PostgreSQL,放置自定義函數
SELECT pp.proname
FROM pg_proc pp
INNER JOIN pg_namespace pn on (pp.pronamespace = pn.oid)
INNER JOIN pg_language pl on (pp.prolang = pl.oid)
WHERE pl.lanname NOT IN ('c','internal')
AND pn.nspname NOT LIKE 'pg_%'
AND pn.nspname <> 'information_schema';
所以,後我聽到dynamic SQL,並確保我可以用它從.NET我嘗試運用它用於這一目的。
do
$$
declare
func_rec record;
begin
for func_rec in (SELECT pp.proname as funcname
FROM pg_proc pp
INNER JOIN pg_namespace pn on (pp.pronamespace = pn.oid)
INNER JOIN pg_language pl on (pp.prolang = pl.oid)
WHERE pl.lanname NOT IN ('c','internal')
AND pn.nspname NOT LIKE 'pg_%'
AND pn.nspname <> 'information_schema')
loop
execute 'drop function '||func_rec.funcname||' cascade';
end loop;
end;
$$
在此期間,我發現爲了放下一個函數,我必須將它的參數提供給DROP命令。
下面是這些參數如何可以檢索一個example子查詢:
(SELECT typname FROM pg_type WHERE oid = funcrow.proargtypes[i])
現在仍然認爲,我不知道如何把那些在功能上的編碼,這將增加所需要的參數,以func_rec.funcname問題刪除這些功能。
因此,請幫助查詢從所有功能中刪除自定義功能。
是,預期和希望,現在正是工作。也來自pgAdmin和.NET。由於我的程序在啓動時自動創建了這些函數(如果不存在),我現在再次清理了這些函數的備份,並且沒有任何可靠的作業/問題。謝謝。 –