我有一个包含两列的设置表 - 名称和值。名字是独一无二的。我可以轻松地将其读入内存,然后使用条目名称作为键创建字典。
我想知道这是否可以完全通过 SQL 使用一些 postgresql 函数并在最后应用该row_to_json
函数来完成。
我有 9.2 版
我有一个包含两列的设置表 - 名称和值。名字是独一无二的。我可以轻松地将其读入内存,然后使用条目名称作为键创建字典。
我想知道这是否可以完全通过 SQL 使用一些 postgresql 函数并在最后应用该row_to_json
函数来完成。
我有 9.2 版
可能吗?它应该是。
我认为您需要做的是创建一个函数,用于将记录拉入(作为参数)并将其转换为任意类型的记录并将其转换为 JSON。
这是在 9.1 上使用 json 扩展完成的。
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"}
现在,如果您想将所有这些合并到一个对象中,您还有一些工作要做,但可以使用相同的基本工具来完成。
这应该在 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 ;