2016-06-20 5 views
2

私はjson_agg機能を持つPostgreSQLリクエストからJSON配列を返しています。しかし、行が見つからない場合、json_aggは、空のJSON配列[]の代わりに空の文字列を返します(json.orgを理解している場合は角括弧が必須です)。例えばなぜPostgreSQLのjson_agg()関数が空の配列を返さないのですか?

:と同じコマンドが '1 = 1'(PostgreSQLの9.5でテスト)有効なJSON配列を返し、一方

SELECT json_agg(t.*) FROM (SELECT 'test' AS mycol WHERE 1 = 2) AS t ; 

は、空の文字列を返します。

空のセットからヌル

+0

'1 = 2 'の任意の行を返すことはありませんし、' 1 = 1'はすべての行を返します。もちろん結果は異なります。なぜあなたはそれが驚くべきものだと正確に分かりますか? –

+0

質問で説明したように、IMHOの 'json_agg'は、行が選択されていないときに有効なJSON配列(つまり' [] ')を返さなければなりません。代わりに、 'json_agg'は空文字列を返します。 – pdagog

+1

空文字列ではなくNULLを返します。そして、この動作は[https://www.postgresql.org/docs/current/static/functions-aggregate.html]で文書化されています: "*カウントを除いて、これらの関数は、行が選択されます* "。あなたが望んでいなければ、 'coalesce()'を使います。 –

答えて

5

json_aggリターン:

select json_agg(t.*) is null 
from (select 'test' as mycol where 1 = 2) t ; 
?column? 
---------- 
t 

あなたはそれが空のJSON配列​​3210をしたい場合:

select coalesce(json_agg(t.*), '[]'::json) 
from (select 'test' as mycol where 1 = 2) t ; 
coalesce 
---------- 
[] 
+4

9.4で動作しません –

+0

9.6で正常に動作します –

関連する問題