Denominazione delle funzioni definite dall'utente - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Denominazione delle funzioni definite dall'utente

Puoi evitare possibili conflitti e risultati imprevisti valutando con attenzione le convenzioni di denominazione delle funzioni definite dall'utente prima dell'implementazione. Poiché i nomi delle funzioni possono essere soggetti a overload, possono entrare in conflitto con nomi di funzioni Amazon Redshift esistenti e future. Questo argomento descrive l'overload e presenta una strategia per evitare i conflitti.

Overload dei nomi delle funzioni

Una funzione è identificata dal proprio nome e da una firma, che corrisponde al numero di argomenti di input e ai tipi di dati degli argomenti. Due funzioni nello stesso schema possono avere lo stesso nome se hanno firme diverse. In altri termini, i nomi delle funzioni possono essere in overload.

Quando si esegue una query, il motore di query determina quale funzione chiamare in base al numero di argomenti specificati e ai tipi di dati degli argomenti. È possibile usare l'overload per simulare funzioni con un numero variabile di argomenti, fino al limite consentito dal comando CREATE FUNCTION.

Prevenzione dei conflitti di denominazione delle funzioni definite dall'utente

Si consiglia di assegnare un nome a tutte le funzioni definite dall'utente utilizzando il prefisso f_. Amazon Redshift riserva il prefisso f_ esclusivamente per le funzioni definite dall'utente e aggiungendo il prefisso f_ ai nomi delle funzioni dell'utente, si evita che il nome della funzione entri in conflitto con altri nomi di funzioni SQL predefinite di Amazon Redshift correnti o future. Ad esempio, assegnando a una nuova funzione definita dall'utente f_sum, si evita il conflitto con la funzione SUM di Amazon Redshift. Analogamente, se si assegna il nome f_fibonacci a una nuova funzione, è possibile evitare un conflitto se Amazon Redshift aggiungerà una funzione denominata FIBONACCI in una versione futura.

È possibile creare una funzione definita dall'utente con lo stesso nome e la stessa firma di una funzione SQL predefinita di Amazon Redshift esistente senza che avvenga l'overload del nome della funzione se la funzione definita dall'utente e la funzione predefinita si trovano in schemi diversi. Poiché le funzioni predefinite si trovano nello schema del catalogo di sistema pg_catalog, puoi creare una funzione definita dall'utente con lo stesso nome in un altro schema, ad esempio uno schema pubblico o definito dall'utente. In alcuni casi, è possibile chiamare una funzione non qualificata esplicitamente con un nome di schema. In tal caso, Amazon Redshift cerca prima lo schema pg_catalog per impostazione predefinita. Pertanto, una funzione incorporata viene eseguita prima di una nuova funzione definita dall'utente con lo stesso nome.

È possibile modificare questo comportamento impostando il percorso di ricerca in modo da aggiungere pg_catalog alla fine. In questo caso, le funzioni definite dall'utente avranno la precedenza su quelle predefinite, ma è possibile che si verifichino dei risultati imprevisti. L'adozione di una strategia di denominazione univoca, ad esempio usando il prefisso riservato f_, è un approccio più affidabile. Per ulteriori informazioni, consultare SET e search_path.