Heim > Datenbank > MySQL-Tutorial > Wie lösche ich alle überladenen Funktionen sicher nach Namen in PostgreSQL?

Wie lösche ich alle überladenen Funktionen sicher nach Namen in PostgreSQL?

Patricia Arquette
Freigeben: 2024-12-29 04:20:10
Original
969 Leute haben es durchsucht

How to Safely Drop All Overloaded Functions by Name in PostgreSQL?

Löschen von Funktionen ohne angegebene Parameternummern/-typen

Beim Verwalten von in einer Textdatei gespeicherten Funktionen kann das Hinzufügen oder Ändern von Funktionsparametern zu Überladungen führen. Das Löschen der ursprünglichen Funktion erfordert eine manuelle Auflistung aller Parametertypen, was umständlich sein kann.

Einfache Abfrage

Um dieses Problem zu beheben, generiert die folgende Abfrage DDL-Anweisungen, um alle Funktionen mit einem bestimmten Namen unabhängig davon zu löschen der Parameter:

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
Nach dem Login kopieren

Funktion

Zur sofortigen Ausführung der generierten Anweisungen die folgende PL/pgSQL-Funktion kann verwendet werden:

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$;
Nach dem Login kopieren

Rufen Sie die Funktion wie folgt auf, um alle Funktionen zu löschen, die dem angegebenen Namen entsprechen:

SELECT f_delfunc('my_function_name');
Nach dem Login kopieren

Die Funktion gibt die Anzahl der gelöschten Funktionen zurück oder 0, wenn keine gefunden wurden .

Das obige ist der detaillierte Inhalt vonWie lösche ich alle überladenen Funktionen sicher nach Namen in PostgreSQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage