パラメータに関係なく、ワイルドカードを使用して関数を削除できますか?
概要
メンテナンステキスト ファイルに保存された関数は、特にパラメータを追加または削除する場合に煩雑になる可能性があります。各関数の正確なパラメーターの順序を手動で入力するのは面倒な場合があります。この記事では、ワイルドカードを使用して指定された名前を持つすべての関数を削除し、パラメーターを指定する必要をなくすためのソリューションを検討します。
関数を削除するためのクエリ
必要な関数を作成するにはDDL ステートメントの場合は、次のクエリを実行します:
SELECT 'DROP FUNCTION ' || oid::regprocedure FROM pg_proc WHERE proname = 'my_function_name' -- Replace 'my_function_name' with the target function name AND pg_function_is_visible(oid); -- Restrict to the current search path
クエリは、引数の型を二重引用符で囲んだ DROP FUNCTION ステートメントを生成します。そしてスキーマ修飾されています。これにより、SQL インジェクションの脆弱性がなくなり、現在の検索パスと一致します。
Drop ステートメントを実行する関数
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$;
目的の関数名で関数を呼び出して、一致する関数を削除し、番号を返しますドロップ:
SELECT f_delfunc('my_function_name');
追加の考慮事項
以上がPostgreSQL では、パラメータに関係なく、ワイルドカード名に一致するすべての関数を削除できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。