2015-06-11 3 views
15

Ich kann eine Funktion erfolgreich wie folgt erstellen:PostgreSQL: Wie man Funktion FUNKTION IF EXISTS ohne Angabe von Parametern fallen lassen?

CREATE FUNCTION Foo(MY_Value INT) RETURNS INT 
AS 'SELECT 2 + MY_Value' 
LANGUAGE SQL 

Allerdings, wenn ich überprüfen möchte zunächst, ob die Funktion vorhanden ist, und es dann fallen, wenn ich tut, ich folgendes angeben:

DROP FUNCTION IF EXISTS Foo(My_Value INT); 

Ohne die Eingangsparameter zu spezifiziert ist, kehrt der nach einem Fehler der besagt „NACHRICHT: Funktion foo() nicht vorhanden ist, übersprungen“

DROP FUNCTION IF EXISTS Foo(); 

Ähnlich wie bei MySQL gibt es eine Möglichkeit, eine FUNCTION in PostgreSQL zu löschen, ohne die Parameter für die Funktion angeben zu müssen? Mit anderen Worten, gibt es eine Entsprechung für das Folgende in der MySQL-Anweisung (d. H. Die gespeicherte Prozedur löschen, ohne die Eingabeparameter anzugeben)?

DROP PROCEDURE IF EXISTS Foo; 

Antwort

35

In den Postgres-Funktionen can be overloaded sind Parameter erforderlich, um überladene Funktionen zu unterscheiden. Um eine Funktion eindeutig zu identifizieren, können Sie nur Typen ihrer Parameter eingeben.

DROP FUNCTION IF EXISTS Foo(INT); 
1

Ab Postgres 10 können Sie Funktionen nur nach ihrem Namen löschen, solange die Namen für ihr Schema eindeutig sind.

Beispiel:

drop function if exists Foo; 

Dokumentation here.