sql >> Databáze >  >> RDS >> PostgreSQL

Vytvořte neměnný klon concat_ws

Za prvé , funkce vyžaduje dva parametry v definici, jak již navrhl Richard, a vy jste podle toho aktualizovali svou otázku.

Za druhé , můžete tuto funkci vytvořit pomocí "any" zadejte pomocí LANGUAGE internal . Neznamená to však, že byste měli.

concat_ws() je pouze STABLE z důvodu. Mimo jiné textová reprezentace date nebo timestamp závisí na nastavení národního prostředí / datestyle, takže výsledek není neměnný . Indexy postavené na tomto by se mohly tiše zlomit. Omezeno na text vstup, je bezpečné jej prohlásit za IMMUTABLE .Protože potřebujete pouze text vstup (nebo varchar , který má implicitní přetypování na text ), omezte jej na váš případ použití a buďte v bezpečí:

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

Označte jej jako PARALLEL SAFE aby se nezkazila paralelita při zapojení této funkce. Příručka:

Odolejte pokušení dělat věci jako je tato immutable_concat_ws('|', now()::text, 'foo') . To by znovu zavedlo uvedené závislosti ve volání.

Související:



  1. MySQL alter table add sloupec s chybou syntaxe primárního klíče

  2. Rails Postgres – dotaz na sloupec Jsonb

  3. Použijte mysqldump k zálohování MySQL nebo MariaDB

  4. MYSQL - Seskupit podle limitu