sql >> Database >  >> RDS >> PostgreSQL

Maak een onveranderlijke kloon van concat_ws

Eerste , de functie vereist twee parameters in de definitie, zoals Richard al suggereerde, en je hebt je vraag dienovereenkomstig aangepast.

Tweede , kunt u die functie maken met "any" invoer met behulp van LANGUAGE internal . Betekent echter niet dat u dat zou moeten doen.

concat_ws() is slechts STABLE voor een reden. Onder andere de tekstweergave van date of timestamp hangt af van locale / datestyle instellingen, dus het resultaat is niet onveranderlijk . Indexen die hierop voortbouwen, kunnen stilletjes breken. Beperkt tot text invoer, is het veilig om het IMMUTABLE te verklaren .Omdat je alleen text nodig hebt invoer (of varchar , die een impliciete cast heeft naar text ), beperk het tot uw gebruik en wees veilig:

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

Markeer het als PARALLEL SAFE om het parallellisme niet te bederven bij het betrekken van deze functie. De handleiding:

Weersta de verleiding om dit soort dingen te doen immutable_concat_ws('|', now()::text, 'foo') . Dit zou de afhankelijkheden in de oproep opnieuw introduceren.

Gerelateerd:



  1. Oracle SQL Query-logboekregistratie

  2. Live update MySQL-gegevens

  3. Waarde 'DOORGAAN' is geen facet-geldige fout bij het uitvoeren van liquibase

  4. Ongestructureerde inhoud:een onaangeboorde brandstofbron voor AI en machine learning