簡體   English   中英

在 PostgreSQL 中是否有一種自動方法將 JSON(B) 列拆分為多個列?

[英]Is there an automated way to split a JSON(B) column into multiple columns in PostgreSQL?

所以我有一個 PostgreSQL (TimescaleDB) 表,看起來像這樣:

╔════════════════════════════╦═══════╦═══════╗
║            tags            ║ time  ║ value ║
╠════════════════════════════╬═══════╬═══════╣
║ {"a": "test", "c": "test"} ║ 10:24 ║   123 ║
║ {"b": "test", "c": "test"} ║ 10:25 ║   110 ║
║ {"b": "test"}              ║ 10:26 ║   130 ║
╚════════════════════════════╩═══════╩═══════╝

我想將 JSON(B) 列拆分為多個列,如下所示:

╔════════╦════════╦════════╦═══════╦═══════╗
║   a    ║   b    ║   c    ║ time  ║ value ║
╠════════╬════════╬════════╬═══════╬═══════╣
║ "test" ║        ║ "test" ║ 10:24 ║   123 ║
║        ║ "test" ║ "test" ║ 10:25 ║   110 ║
║        ║ "test" ║        ║ 10:26 ║   130 ║
╚════════╩════════╩════════╩═══════╩═══════╝

我查看了JSON 處理函數,似乎這些函數需要找到所有 JSON(B) 屬性和類型。 有沒有辦法自動執行此操作?

沒有辦法讓這個動態。 解析語句時,數據庫必須知道查詢的所有列的數量(和類型),早在實際執行之前很久。


如果您始終具有相同的結構,則可以創建一個類型:

create type tag_type as (a text, b text, c text);

然后使用jsonb_populate_record()

select (jsonb_populate_record(null::tag_type, tags)).*, time, value
from the_table;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM