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.
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
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$;
Rufen Sie die Funktion wie folgt auf, um alle Funktionen zu löschen, die dem angegebenen Namen entsprechen:
SELECT f_delfunc('my_function_name');
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!