Vermeidung von UDF Namenskonflikten - Amazon Redshift

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Vermeidung von UDF Namenskonflikten

Sie können potenzielle Konflikte und unerwartete Ergebnisse vermeiden, wenn Sie Ihre UDF Namenskonventionen vor der Implementierung berücksichtigen. Da Funktionsnamen überladen sein können, besteht die Möglichkeit, dass Namenskonflikte mit anderen Amazon-Redshift-Funktionen auftreten oder sich zu einem späteren Zeitpunkt ergeben können. In diesem Thema werden überladene Funktionen und eine Strategie zur Vermeidung von Namenskonflikten besprochen.

Überladen von Funktionsnamen

Eine Funktion wird anhand Ihres Namens und ihrer Signatur identifiziert, wobei die Signatur im Wesentlichen die Anzahl und die Datentypen der Eingabeparameter ist. Solange sich zwei Funktionen in demselben Schema bezüglich ihrer Signatur unterscheiden, können sie denselben Namen haben. Mit anderen Worten, die Funktionsnamen können überladen sein.

Wenn Sie eine Abfrage ausführen, identifiziert die Abfrage-Engine auf der Grundlage des übergebenen Namens und der Datentypen der Parameter, welche Funktion aufgerufen werden soll. Sie können das Überladen nutzen, um Funktionen mit einer variablen Anzahl von Argumenten bis zur maximal durch den Befehl CREATE FUNCTION zugelassen Anzahl zu simulieren.

Vermeidung von Konflikten mit integrierten Amazon Redshift Redshift-Funktionen

Wir empfehlen, dass Sie alle UDFs mit dem Präfix f_ benennen. Amazon Redshift reserviert das f_ Präfix ausschließlich für UDFs und indem Sie Ihren UDF Namen das Präfix voranstellenf_, stellen Sie sicher, dass Ihr UDF Name nicht mit bestehenden oder future integrierten SQL Funktionsnamen von Amazon Redshift in Konflikt gerät. Wenn Sie beispielsweise ein neues benennen UDFf_sum, vermeiden Sie Konflikte mit der Amazon Redshift SUM Redshift-Funktion. Ebenso vermeiden Sie Konflikte, wenn Sie eine neue Funktion benennenf_fibonacci, wenn Amazon Redshift eine Funktion hinzufügt, die FIBONACCI in einer future Version benannt wird.

Sie können eine UDF mit demselben Namen und derselben Signatur wie eine bestehende integrierte Amazon Redshift SQL Redshift-Funktion erstellen, ohne dass der Funktionsname überladen wird, wenn die UDF und die integrierte Funktion in unterschiedlichen Schemas existieren. Da integrierte Funktionen im Systemkatalogschema pg_catalog vorhanden sind, können Sie eine Funktion UDF mit demselben Namen in einem anderen Schema erstellen, z. B. einem öffentlichen oder einem benutzerdefinierten Schema. In einigen Fällen können Sie möglicherweise eine Funktion aufrufen, die nicht explizit mit einem Schemanamen qualifiziert ist. Wenn ja, durchsucht Amazon Redshift standardmäßig zuerst das Schema pg_catalog. Somit wird eine integrierte Funktion vor einer neuen UDF mit demselben Namen ausgeführt.

Sie können dieses Verhalten ändern, indem Sie den Suchpfad so angeben, dass „pg_catalog“ ans Ende gestellt ist. Wenn Sie dies tun, haben Sie UDFs Vorrang vor integrierten Funktionen, aber diese Übung kann zu unerwarteten Ergebnissen führen. Es wird stattdessen geraten, eine Namenskonvention zu verwenden, beispielsweise das reservierte Präfix f_, weil diese Vorgehensweise zuverlässiger ist. Weitere Informationen erhalten Sie unter SET und search_path.