sql >> データベース >  >> RDS >> PostgreSQL

concat_wsの不変のクローンを作成します

    最初 、関数には2つが必要です リチャードがすでに提案したように、定義内のパラメータがあり、それに応じて質問を更新しました。

    2番目"any"を使用してその関数を作成できます LANGUAGE internalを使用した入力 。ただし、そうすべきだという意味ではありません。

    concat_ws() STABLEのみです 理由があります。とりわけ、dateのテキスト表現 またはtimestamp ロケール/日付スタイルの設定に依存するため、結果は不変ではありません。 。これに基づいて構築されたインデックスは、黙って壊れることがあります。 textに制限されています 入力、IMMUTABLEと宣言しても安全です 。必要なのはtextだけなので 入力(またはvarchartextへの暗黙のキャストがあります )、ユースケースに限定して安全を確保してください:

    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') 。これにより、上記の依存関係が呼び出しに再導入されます。

    関連:



    1. スコープでフィールドを拡張するレール、PGはそれを好きではありません

    2. 部分的なキーワード一致のスフィンクス検索

    3. Amazon RDSで「データをファイルにロードする」方法は?

    4. 複数の行をフェッチして1つの変数に格納-ORACLESTOREDPROCEDURE