Først , kræver funktionen to parametre i definitionen, som Richard allerede har foreslået, og du opdaterede dit spørgsmål i overensstemmelse hermed.
Anden , kan du oprette den funktion med "any"
input ved hjælp af LANGUAGE internal
. Det betyder dog ikke, at du skal.
concat_ws()
er kun STABLE
Af en grund. Blandt andet tekstgengivelsen af date
eller timestamp
afhænger af indstillinger for lokalitet/datostil, så resultatet er ikke uforanderligt . Indekser, der bygger på dette, kan stille og roligt gå i stykker. Begrænset til text
input, er det sikkert at erklære det IMMUTABLE
.Da du kun behøver text
input (eller varchar
, som har en implicit cast til text
), begrænser det til dit brugstilfælde og vær sikker:
CREATE OR REPLACE FUNCTION immutable_concat_ws(text, VARIADIC text[])
RETURNS text AS 'text_concat_ws' LANGUAGE internal IMMUTABLE PARALLEL SAFE;
Marker det som PARALLEL SAFE
for ikke at ødelægge paralleliteten, når denne funktion involveres. Manualen:
Modstå fristelsen til at gøre ting som dette immutable_concat_ws('|', now()::text, 'foo')
. Dette ville genindføre nævnte afhængigheder i opkaldet.
Relateret: