Postgresql

數組字元串化以在 Postgres 輸出中使用“{}”

  • January 17, 2017

我有一個數組列,但是當我使用 SQL SELECT 輸出它時,它看起來像

{{"a":"b","c":"d"},{"e":"f","g":"h"}}

但為什麼它以 and 開頭和{{結尾}}?不應該是[{}]數組嗎?在列的輸出內部JSONB,數組看起來像預期的那樣(方括號,而不是花括號,包圍數組值)。

我做錯了什麼,還是上面的輸出真的是一個對像數組

來自數組輸入和輸出語法中的文件

數組值的外部文本表示由根據數組元素類型的 I/O 轉換規則解釋的項以及指示數組結構的裝飾組成。**裝飾由數組值周圍的****花括號 ({和) 以及相鄰項之間的分隔符組成。}**分隔符通常是逗號 (,),但也可以是其他字元:它由數組元素類型的 typdelim 設置確定。在 PostgreSQL 發行版中提供的標準數據類型中,所有類型都使用逗號,但 type box 除外,它使用分號 (;)。在多維數組中,每個維度(行、平面、立方體等)都有自己的大括號級別,並且必須在同一級別的相鄰大括號實體之間寫入分隔符。

不確定ARRAY規範中是否有 stingification,但對於 PostgreSQL 來說,用{}. 請注意,這與創建數組的文字語法不對稱。

SELECT ARRAY[1,2,3];
 array  
---------
{1,2,3}

但是您可以看到它是有效的並且可以預期,因為您可以顯式地轉換為數組。

SELECT '{1,2,3}'::int[];
 int4   
---------
{1,2,3}

如果在你的情況下你有兩個jsonbARRAY它會被字元串化

SELECT ARRAY[
 $${"a":"b","c":"d"}$$::jsonb,
 $${"e":"f","g":"h"}$$::jsonb
];
                             array                              
-----------------------------------------------------------------
{"{\"a\": \"b\", \"c\": \"d\"}","{\"e\": \"f\", \"g\": \"h\"}"}

請注意,PostgreSQL 數組中的兩個 JSON 對象與JSON 數組中的兩個對像不同。

SELECT $$[{"a":"b","c":"d"},{"e":"f","g":"h"}]$$::jsonb;
                   jsonb                     
----------------------------------------------
[{"a": "b", "c": "d"}, {"e": "f", "g": "h"}]

引用自:https://dba.stackexchange.com/questions/161301