0

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

我想知道这是否可以完全通过 SQL 使用一些 postgresql 函数并在最后应用该row_to_json函数来完成。

我有 9.2 版

4

2 回答 2

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"}

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

于 2013-11-14T02:15:04.227 回答
-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 ;
于 2013-09-11T11:51:47.093 回答