Postgresql

我可以動態選擇儲存在 postgres jsonb 列中的鍵作為值嗎

  • August 29, 2020

我在 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。解決方法有明顯的弱點。

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