我有一个包含两列的设置表 - 名称和值。名字是独一无二的。我可以轻松地将其读入内存,然后使用条目名称作为键创建字典。
我想知道是否可以使用一些postgresql函数完全从SQL完成,并在最后应用row_to_json
函数。
我有9.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 ;