ホームページ >データベース >mysql チュートリアル >PostgreSQL でオーバーロードされたすべての関数を名前で安全に削除するにはどうすればよいですか?

PostgreSQL でオーバーロードされたすべての関数を名前で安全に削除するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-29 04:20:10956ブラウズ

How to Safely Drop All Overloaded Functions by Name in 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。