2

次のコード例では、postgresql (9.4) は、複合型のローカル変数を json 文字列に変換することになっています。どうやらpostgresqlは、同じ型にキャストされたnull値とは異なるnull値を持つ変数を処理します。

私のアプリケーションでは、複合型がネストされており、複合型の変数の値が null の場合に null を取得したいと考えています。

皆さんがここで私を助けてくれることを願っています。

CREATE TYPE mytype AS (
    id SMALLINT,
    name TEXT
);

DO $$
DECLARE
    l_var mytype;
BEGIN
    l_var := NULL;
    RAISE INFO '%',to_json(NULL::mytype);
    RAISE INFO '%',to_json(l_var) ;
END $$; 

--Output
INFO:  <NULL>
INFO:  {"id":null,"name":null}
4

2 に答える 2

3

はい、PostgreSQL は空のフィールドを持つ ROW と NULL を区別します。修正は難しくありません。CASE 式を使用する必要があります。

postgres=# DO $$
DECLARE
    l_var mytype;
BEGIN
    l_var := NULL;
    RAISE INFO '%',to_json(NULL::mytype);
    RAISE INFO '%',to_json(CASE WHEN l_var IS NULL THEN NULL ELSE l_var END) ;
END $$; 
INFO:  <NULL>
INFO:  <NULL>
DO
于 2015-05-06T07:03:39.317 に答える
0

残念ながら、pavels ソリューションは別のタイプで使用されており、提案されたケース構造を適用できないため、私にはうまくいきません。

しかし、バックエンド開発者と話し合った後、フィールドに値がなくても常に完全な json 構造を受け取る方がよいでしょう。したがって、シマンティックな観点からは、postgres は正常に動作します。

于 2015-05-07T07:56:11.150 に答える