PostgreSQL:JSON中的计算字段

时间:2016-04-05 14:38:53

标签: c# sql postgresql

有没有办法计算JSON中的字段。以下是我的表格设置方式:

CREATE TABLE test1
(
     id int not null,
     data JSONB
)

这是我要插入的文件

{
     'name': "test name",
     'age': 46,
     'heartrate': 211,
     'heartrateminuseage': function(){ return this.heartrate - this.age; }
}

我怎样才能做出像这样的工作?

1 个答案:

答案 0 :(得分:1)

假设您有以下数据:

CREATE TABLE test1(id INT NOT NULL, data JSONB);

INSERT INTO test1(id, data)
VALUES (1,'{"name": "test name",
            "age": 46,
            "heartrate": 211}'),
      (2,'{"name": "test name2",
           "age": 50,
           "heartrate": 200,
           "heartrateminuseage": 1000}');   

要计算"heartrateminuseage",您可以先使用提取值,然后使用jsonb_set进行设置:

SELECT id, data
   ,jsonb_set(data,'{"heartrateminuseage"}',
              to_jsonb((data->>'heartrate')::int - (data ->>'age')::int),
              true) AS data_2
FROM test1;

输出:

enter image description here

至于calculated column

  1. 创建视图
  2.   CREATE VIEW wv_test1
      AS
        SELECT id
          ,jsonb_set(data,'{"heartrateminuseage"}',
                     to_jsonb((data->>'heartrate')::int - (data ->>'age')::int),
                     true) AS data
        FROM test1;  
    
    1. 创建将更新列
    2. 的触发器
    3. 创建一个功能
    4. 更多信息: Computed / calculated columns in PostgreSQL Store common query as column?