最初 、関数には2つが必要です リチャードがすでに提案したように、定義内のパラメータがあり、それに応じて質問を更新しました。
2番目 、"any"
を使用してその関数を作成できます LANGUAGE internal
を使用した入力 。ただし、そうすべきだという意味ではありません。
concat_ws()
STABLE
のみです 理由があります。とりわけ、date
のテキスト表現 またはtimestamp
ロケール/日付スタイルの設定に依存するため、結果は不変ではありません。 。これに基づいて構築されたインデックスは、黙って壊れることがあります。 text
に制限されています 入力、IMMUTABLE
と宣言しても安全です 。必要なのはtext
だけなので 入力(またはvarchar
、text
への暗黙のキャストがあります )、ユースケースに限定して安全を確保してください:
CREATE OR REPLACE FUNCTION immutable_concat_ws(text, VARIADIC text[])
RETURNS text AS 'text_concat_ws' LANGUAGE internal IMMUTABLE PARALLEL SAFE;
PARALLEL SAFE
としてマークします この機能を使用するときに並列処理を損なわないようにします。 マニュアル:
このようなことをしたいという誘惑に抵抗してくださいimmutable_concat_ws('|', now()::text, 'foo')
。これにより、上記の依存関係が呼び出しに再導入されます。
関連: