是否可以将具有唯一名称的设置表转换为postgresql中的json哈希对象?

时间:2013-09-11 11:35:13

标签: json postgresql

我有一个包含两列的设置表 - 名称和值。名字是独一无二的。我可以轻松地将其读入内存,然后使用条目名称作为键创建字典。

我想知道是否可以使用一些postgresql函数完全从SQL完成,并在最后应用row_to_json函数。

我有9.2版本

2 个答案:

答案 0 :(得分:2)

有可能吗?应该是。

我认为您需要做的是创建一个函数来拉取记录(作为参数)并将其转换为任意类型的记录并将其转换为JSON。

这是在带有json扩展名的9.1上完成的。

create or replace function to_json(test) returns json language plpgsql
as $$
declare t_row record;
        retval json;
begin
    EXECUTE $E$ SELECT $1 AS $E$ || quote_ident($1.name) INTO t_row 
    USING $1.value;
    RETURN row_to_json(t_row);
end;
$$;

然后我可以:

select * from test;
 name  | value  
-------+--------
 test1 | foo
 test2 | foobar
(2 rows)

SELECT to_json(test) from test;
      to_json       
--------------------
 {"test1":"foo"}
 {"test2":"foobar"}

现在,如果你想将这些全部合并到一个对象中,你还有一些工作要做,但可以使用相同的基本工具完成。

答案 1 :(得分:-1)

这个应该在postgres-9.3中工作。 (未经测试,因为我还没有在这里获得9.3)

DROP SCHEMA tmp CASCADE;
CREATE SCHEMA tmp ;
SET search_path=tmp;

CREATE table pipo (name varchar NOT NULL PRIMARY KEY
                , value varchar);

INSERT INTO pipo (name, value ) VALUES
('memory' , '10Mb'), ('disk' , '1Gb'), ('video' , '10Mpix/sec'), ('sound' , '100dB');

SELECT row_to_json( ROW(p.name,p.value) )
FROM pipo p ;