2016-04-05 69 views
1

有没有方法可以计算JSON中的字段。这里是我的表是如何设置: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

让我们假设你有一个像数据:

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. 创建视图
 
    CREATE VIEW wv_test1 
    AS 
    SELECT id 
     ,jsonb_set(data,'{"heartrateminuseage"}', 
       to_jsonb((data->>'heartrate')::int - (data ->>'age')::int), 
       true) AS data 
    FROM test1; 
  • 创建触发器,将更新列
  • 创建函数
  • 更多信息:Computed/calculated columns in PostgreSQL and Store common query as column?