在Postgres 中,在向現有函數新增或刪除參數時,管理儲存在文字檔案中的函數可能會很困難。為了解決這個問題,有一個通配符方法來刪除具有特定名稱的所有函數,無論參數的數量或類型為何。
執行以下查詢來產生DDL 語句刪除具有特定名稱的所有函數:
SELECT 'DROP FUNCTION ' || oid::regprocedure FROM pg_proc WHERE proname = 'my_function_name' AND pg_function_is_visible(oid);
將'my_function_name' 替換為您的實際函數名稱(區分大小寫且不包含雙引號)。此查詢傳回 DROP FUNCTION 語句的列表,其中包含函數所有重載的正確參數類型。
要立即執行drop 語句,請考慮創建PL/pgSQL 函數:
CREATE OR REPLACE FUNCTION f_delfunc(_name text, OUT functions_dropped int) LANGUAGE plpgsql AS $func$ DECLARE _sql text; BEGIN SELECT count(*)::int , 'DROP FUNCTION ' || string_agg(oid::regprocedure::text, '; DROP FUNCTION ') FROM pg_catalog.pg_proc WHERE proname = _name AND pg_function_is_visible(oid) INTO functions_dropped, _sql; IF functions_dropped > 0 THEN EXECUTE _sql; END IF; END $func$;
刪除所有名為'my_function_name':
SELECT f_delfunc('my_function_name');
函數將傳回刪除的函數數量。
以上是如何在不知道參數的情況下安全刪除 PostgreSQL 函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!