我有一個複雜的數據庫,其中的鍵和值存儲在不同的表中。這是USEF爲我的應用程序拉出值時,它們聚集,像這樣:postgres中的Array_agg有選擇地引用
SELECT array_agg(key_name), array_agg(vals)
FROM (
SELECT
id,
key_name,
array_agg(value)::VARCHAR(255) AS vals
FROM factor_key_values
WHERE id=20
GROUP BY key_name, id
) f;
這個特定的查詢,在我的情況下提供了以下無效JSON:
-[ RECORD 1 ]-----------------------------------------------------------------------
array_agg | {"comparison method","field score","field value"}
array_agg | {"{\"text category\"}","{100,70,50,0,30}","{A,B,C,F,\"No Experience\"}"}
注意,數組varchars僅在字符串有空格時被引用。我已經縮小下來到ARRAY_AGG
爲了完整這裏的行爲是一個例子:
BEGIN;
CREATE TABLE test (txt VARCHAR(255));
INSERT INTO test(txt) VALUES ('one'),('two'),('three'), ('four five');
SELECT array_agg(txt) FROM test;
結果將是:
{one,two,three,"four five"}
這就是爲什麼我的JSON是打破。我可以在應用程序代碼中處理未加引號或帶引號的字符串,但混合使用堅果。有沒有解決這個問題的方法?
我試過,但事情是它是一個相當大的查詢,這是一個子查詢中,所以如果我json編碼的內部選擇我結束了雙json編碼。 –
@FrankConry因此,回到基礎知識並顯示樣本數據和預期輸出。 –
我最終不得不重構整個查詢,但最後'json_agg'是正確的選擇。謝謝! –