Zuerst , benötigt die Funktion zwei Parameter in der Definition, wie Richard bereits vorgeschlagen hat, und Sie haben Ihre Frage entsprechend aktualisiert.
Zweiter , können Sie diese Funktion mit "any"
erstellen Eingabe über LANGUAGE internal
. Bedeutet jedoch nicht, dass Sie dies tun sollten.
concat_ws()
ist nur STABLE
aus einem Grund. Unter anderem die Textdarstellung von date
oder timestamp
hängt von Gebietsschema-/Datumsstil-Einstellungen ab, daher ist das Ergebnis nicht unveränderlich . Darauf aufbauende Indizes könnten stillschweigend brechen. Beschränkt auf text
Eingabe, es ist sicher, sie als IMMUTABLE
zu deklarieren .Da braucht man nur text
input (oder varchar
, die eine implizite Umwandlung in text
hat ), beschränken Sie es auf Ihren Anwendungsfall und seien Sie sicher:
CREATE OR REPLACE FUNCTION immutable_concat_ws(text, VARIADIC text[])
RETURNS text AS 'text_concat_ws' LANGUAGE internal IMMUTABLE PARALLEL SAFE;
Markieren Sie es als PARALLEL SAFE
um die Parallelität nicht zu beeinträchtigen, wenn diese Funktion einbezogen wird. Das Handbuch:
Widerstehen Sie der Versuchung, solche Dinge zu tun immutable_concat_ws('|', now()::text, 'foo')
. Dies würde besagte Abhängigkeiten wieder in den Aufruf einführen.
Verwandte: