Postgresql
我可以動態選擇儲存在 postgres jsonb 列中的鍵作為值嗎
我在 Postgres 數據庫中有一個 JSONB 列,其中包含一些關於一行的動態數據。為簡單起見,將此表視為具有 id 列和“dynamicData”JSONB 列的單個表。假設連續,我將以下內容儲存在“dynamicData”列中
{ dynamicField1: 'value1', dynamicField2: 'value2', }
我知道我可以選擇這些作為選擇中的列,例如
Select dynamicData->dynamicField1 as dynamicField1, dynamicData->dynamicField2 as dynamicField2, From some_table
但我很好奇的是,如果我能以某種方式告訴 PG 我希望 JSONB 列中的所有鍵都被選為列。
這是因為我有位於表頂部的數據庫視圖,如果我在動態數據列中添加新的 JSONB 鍵,那麼如果我無法自動選擇鍵作為列,我將需要以某種方式更新這些視圖。
就像@a_horse 告訴你的那樣,SQL 是嚴格類型化的,並且要求最遲在呼叫時知道生成的行類型。
如果鍵名遵循可預測的模式,並且只能有一個微不足道的數字,則您可能會在視圖中“過度配置”:
SELECT dynamic_data->'dynamicField1' AS dynamicField1 , dynamic_data->'dynamicField2' AS dynamicField2 , dynamic_data->'dynamicField3' AS dynamicField3 -- overprovisioned columns , ... , dynamic_data->'dynamicField3' AS dynamicField9 FROM (SELECT json '{"dynamicField1": "value1" , "dynamicField2": "value2"}') tbl(dynamic_data);
缺少的鍵得到一個 NULL 值。
dynamicField3
-dynamicField9
在範例中為 NULL。解決方法有明顯的弱點。