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.
Verhindern von UDF-Namenskonflikten
Sie können Namenskonflikte und unerwartete Ergebnisse verhindern, wenn Sie sich bei der Implementation an Namenskonventionen halten. 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 voranstellen, stellen Sie sicherf_
, dass Ihr UDF-Name nicht mit bestehenden oder future Namen der integrierten SQL-Funktionen von Amazon Redshift kollidiert. Wenn Sie eine neue UDF beispielsweise f_sum
benennen, vermeiden Sie einen Konflikt mit der SUM-Funktion von Amazon Redshift. Wenn Sie eine neue Funktion mit f_fibonacci
benennen, vermeiden Sie einen Konflikt, wenn Amazon Redshift in einer zukünftigen Version eine Funktion mit dem Namen FIBONACCI hinzufügt.
Sie können eine UDF mit demselben Namen und derselben Signatur wie eine vorhandene integrierte Amazon-Redshift-SQL-Funktion erstellen, ohne dass der Funktionsname überladen ist, wenn sich die UDF und die integrierte Funktion in verschiedenen Schemata befinden. Integrierte Funktionen befinden sich im Systemschema „pg_catalog“, daher können Sie UDFs mit demselben Namen wie integrierte Funktionen in einem anderen Schema erstellen, beispielsweise in einem öffentlichen oder in 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. Daher läuft eine eingebaute Funktion vor einer neuen UDF mit dem gleichen Namen.
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 Vorgehensweise 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.