sql >> Databasteknik >  >> RDS >> PostgreSQL

Skapa en oföränderlig klon av concat_ws

Först , funktionen kräver två parametrar i definitionen, som Richard redan föreslagit, och du uppdaterade din fråga därefter.

Andra , kan du skapa den funktionen med "any" inmatning med LANGUAGE internal . Men det betyder inte att du borde göra det.

concat_ws() är bara STABLE av en anledning. Bland annat textrepresentationen av date eller timestamp beror på inställningarna för språk/datumstil, så resultatet är inte oföränderligt . Index som bygger på detta kan tyst gå sönder. Begränsad till text input, är det säkert att förklara det IMMUTABLE .Eftersom du bara behöver text input (eller varchar , som har en implicit cast till text ), begränsa det till ditt användningsfall och var säker:

CREATE OR REPLACE FUNCTION immutable_concat_ws(text, VARIADIC text[])
RETURNS text AS 'text_concat_ws' LANGUAGE internal IMMUTABLE PARALLEL SAFE;

Markera den som PARALLEL SAFE att inte förstöra parallellismen när man involverar denna funktion. Manualen:

Motstå frestelsen att göra saker som detta immutable_concat_ws('|', now()::text, 'foo') . Detta skulle återinföra nämnda beroenden i samtalet.

Relaterat:



  1. inkonsekvent indrag med Python efter split

  2. Hur man tvingar nolock-tips för sql-serverinloggningar

  3. 15 Användbara MySQL/MariaDB-prestandajusteringar och optimeringstips

  4. Datum i UTC i mysql