管理儲存在文字檔案中的函數時,新增或修改函數參數可能會產生重載。刪除原始函數需要手動列出所有參數類型,這可能會很麻煩。
為了解決這個問題,以下查詢產生DDL 語句來刪除具有給定名稱的所有函數,無論參數:
SELECT 'DROP FUNCTION ' || oid::regprocedure FROM pg_proc WHERE proname = 'my_function_name' -- function name without schema-qualification AND pg_function_is_visible(oid); -- restrict to current search path
為了立即執行產生的語句,以下可以使用PL/pgSQL函數:
CREATE OR REPLACE FUNCTION f_delfunc(_name text, OUT functions_dropped int) LANGUAGE plpgsql AS $func$ -- drop all functions with given _name in the current search path, regardless of function parameters 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) -- restrict to current search path INTO functions_dropped, _sql; -- count only returned if subsequent DROPs succeed IF functions_dropped > 0 THEN -- only if function(s) found EXECUTE _sql; END IF; END $func$;
如下呼叫函數,刪除所有與指定名稱相符的函數:
SELECT f_delfunc('my_function_name');
函數傳回刪除的函數數量或 0如果找不到。
以上是如何在 PostgreSQL 中以名稱安全刪除所有重載函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!