2015-06-11 16 views
15

posso creare con successo una funzione come segue:PostgreSQL: Come eseguire DROP FUNCTION SE EXISTS senza specificare i parametri?

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

Tuttavia, se prima voglio verificare se esiste la funzione e poi rilasciarlo se lo fa, devo specificare quanto segue:

DROP FUNCTION IF EXISTS Foo(My_Value INT); 

senza specificare i parametri di input, il seguente restituisce un errore "AVVISO: function foo() non esiste, saltare"

DROP FUNCTION IF EXISTS Foo(); 

Simile a MySQL, c'è un modo per rilasciare una FUNZIONE in PostgreSQL senza dover specificare i parametri della funzione? In altre parole, esiste un equivalente per quanto segue nell'istruzione MySQL (ad esempio, eliminare la stored procedure senza specificare i parametri di input)?

DROP PROCEDURE IF EXISTS Foo; 

risposta

35

In Postgres Funzioni di can be overloaded, quindi sono necessarie per distinguere funzioni sovraccaricate parametri. Per identificare univocamente una funzione puoi inserire solo i tipi dei suoi parametri.

DROP FUNCTION IF EXISTS Foo(INT); 
1

A partire da Postgres 10 è possibile rilasciare le funzioni solo per nome, purché i nomi siano univoci per il loro schema.

Esempio:

drop function if exists Foo; 

Documentazione here.

Problemi correlati