Postgresql
數組字元串化以在 Postgres 輸出中使用“{}”
我有一個數組列,但是當我使用 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}
如果在你的情況下你有兩個
jsonb
,ARRAY
它會被字元串化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"}]