Postgres 9.3 を使用して JSON データを JSON 列に挿入/更新する大量の PLPGSQL コードがあります。
時間をかけてコードを変換して JSONB 形式に移行し、より優れたインデックス作成と新しい演算子を利用したいと考えています。
すべてのコードを書き直さずに新しい JSONB 形式を使用する方法はありますか?
たとえば、JSON を受け入れて返す多くの関数があります。粗い例です:-
FUNCTION foo(payload JSON) RETURNS JSON AS
$$
BEGIN
...
INSERT INTO baa(json, name) VALUES(payload, 'name');
RETURN '{"message" : "done"}'::JSON
END
$$ LANGUAGE PLPGSQL;
私の理想は、関数を書き直すことなくjsonをjsonbにキャストするものです。挿入する前にこれを行うトリガー関数を試しましたが、postgres クエリ構文チェッカーが最初にそこに到達するため、これは機能しません:-
ERROR: column "json" is of type jsonb but expression is of type json
私にできることは何もないので、すべてのコード (数千行) を書き直す必要があると思いますが、これを公開して、挿入時に CAST を実行できる賢いアイデアがあるかどうかを確認したいと思いました。 /更新して、書き直しのための時間を購入します。