ホームページ >データベース >mysql チュートリアル >PostgreSQL でオーバーロードされたすべての関数を名前で安全に削除するにはどうすればよいですか?
テキスト ファイルに保存された関数を管理する場合、関数パラメータを追加または変更するとオーバーロードが作成される可能性があります。元の関数を削除するには、すべてのパラメータ タイプを手動でリストする必要があり、面倒な場合があります。
これに対処するために、次のクエリは、指定された名前を持つすべての関数を削除する 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 中国語 Web サイトの他の関連記事を参照してください。