Heim > Datenbank > MySQL-Tutorial > Kann ich alle Funktionen, die einem Platzhalternamen entsprechen, in PostgreSQL löschen, unabhängig von ihren Parametern?

Kann ich alle Funktionen, die einem Platzhalternamen entsprechen, in PostgreSQL löschen, unabhängig von ihren Parametern?

Patricia Arquette
Freigeben: 2024-12-25 19:42:10
Original
1021 Leute haben es durchsucht

Can I Drop All Functions Matching a Wildcard Name in PostgreSQL, Regardless of Their Parameters?

Kann ich Funktionen mit einem Platzhalter löschen, unabhängig von Parametern?

Einführung

Wartung In einer Textdatei gespeicherte Funktionen können umständlich sein, insbesondere beim Hinzufügen oder Entfernen von Parametern. Das manuelle Eingeben der genauen Parameterreihenfolge für jede Funktion kann mühsam sein. In diesem Artikel wird eine Lösung zum Löschen aller Funktionen mit einem bestimmten Namen mithilfe eines Platzhalters untersucht, sodass keine Parameter angegeben werden müssen.

Abfrage zum Löschen von Funktionen

Um das Notwendige zu erstellen Führen Sie bei DDL-Anweisungen die folgende Abfrage aus:

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

Die Abfrage erzeugt DROP FUNCTION-Anweisungen mit Argumenttypen, doppelten Anführungszeichen und Schema-qualifiziert. Dies gewährleistet keine SQL-Injection-Schwachstelle und entspricht dem aktuellen Suchpfad.

Funktion zum Ausführen von Drop-Anweisungen

Für die sofortige Ausführung der DROP-Anweisungen erstellen Sie eine PL/pgSQL-Funktion :

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

Rufen Sie die Funktion mit dem gewünschten Funktionsnamen auf, um die passenden Funktionen zu löschen und die Nummer zurückzugeben gelöscht:

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

Zusätzliche Überlegungen

  • Diese Methode löscht alle Funktionen mit dem angegebenen Namen, unabhängig von Parametern oder Schema.
  • Seien Sie vorsichtig, wenn Sie diese Abfrage ausführen, da dadurch Funktionen dauerhaft entfernt werden können.
  • Für Postgres-Versionen vor 9.1 verwenden Sie regproc und pg_get_function_identity_arguments(oid) anstelle von regprocedure und der Funktion string_agg.

Das obige ist der detaillierte Inhalt vonKann ich alle Funktionen, die einem Platzhalternamen entsprechen, in PostgreSQL löschen, unabhängig von ihren Parametern?. 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