Amazon Redshift unterstützt ab Patch 198 nicht mehr die Erstellung neuer Python-UDFs. Bestehende Python-UDFs werden bis zum 30. Juni 2026 weiterhin funktionieren. Weitere Informationen finden Sie im Blog-Posting
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-Funktionen
Es wird empfohlen, dass Sie alle UDFs mit dem Präfix f_ benennen. Amazon Redshift reserviert das Präfix f_ ausschließlich für UDFs. Wenn Sie Ihren UDF-Namen f_ voranstellen, stellen Sie daher sicher, dass Ihre UDF-Namen nicht im Widerspruch zu den Namen vorhandener oder zukünftiger, in Amazon Redshift integrierter SQL-Funktionen stehen. 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 Ihre UDFs Vorrang vor integrierten Funktionen. Diese Vorgehensweise kann jedoch zu nicht vorhergesehenen 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.