sql >> Database teknologi >  >> RDS >> PostgreSQL

Opret en uforanderlig klon af concat_ws

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:



  1. Hvor vigtig er rækkefølgen af ​​kolonner i indekser?

  2. Udløbsdato som standardværdi for kolonnen TIMESTAMP

  3. MySQL:FEJL 1215 (HY000):Kan ikke tilføje fremmednøglebegrænsning

  4. Kun mysqldump-skema, skemaopdatering uden drop