我想從我的Postgres數據庫中的所有模式中刪除一個函數。我有〜200架構,(t0000001
,t0000002
,t0000003
...),我真的不喜歡手動。如何從所有模式中刪除函數
有沒有辦法做到這一點?
我想從我的Postgres數據庫中的所有模式中刪除一個函數。我有〜200架構,(t0000001
,t0000002
,t0000003
...),我真的不喜歡手動。如何從所有模式中刪除函數
有沒有辦法做到這一點?
你可以試試這個:
do $$
declare s record;
begin
for s in select schema_name from information_schema.schemata loop
execute 'drop function if exists ' || s.schema_name || '.yourfunctionname()';
end loop;
end; $$;
這將是非常低效遍歷數百模式,而功能可以在幾人只是存在。
另外DROP FUNCTION
可以一下子全部放下。
並且Postgres支持函數重載,所以任何數量的函數都可以在相同的模式中存在,但具有不同的參數。每文檔:
的參數類型的函數必須指定,因爲幾個 不同的功能,可以用相同的名字和不同的參數列表存在。
大膽重視我的。
這將刪除所有函數具有相同的基本名稱是可見的調用者(否則他無法刪除它)。
小心!
CREATE OR REPLACE FUNCTION f_delfunc(_name text)
RETURNS void AS
$func$
BEGIN
EXECUTE (
SELECT string_agg(format('DROP FUNCTION %s(%s);'
,oid::regproc
,pg_catalog.pg_get_function_identity_arguments(oid))
,E'\n')
FROM pg_proc
WHERE proname = _name
AND pg_function_is_visible(oid));
END
$func$ LANGUAGE plpgsql;
相關答案更多的細節: