在plpgsql中是否有可能获取记录项名称并使用它们?

时间:2014-09-03 14:25:42

标签: postgresql variables record plpgsql descriptor

我需要使用"提醒通知"报告记录项目,但包括项目名称。

raise notice 'rec=%',r; -- is not very good

是否有可能做某些事情:

declare
  r record;
  itemname varchar(200);
begin
  select * into r from my_table_unknown_structure;

  for itemname in pg_record_item_names(r)
  loop
    raise notice '%=%,itemname,pg_record_item_value(r,itemname);
  end loop;
end;

2 个答案:

答案 0 :(得分:1)

您可以为表格的每一行设置一个JSON对象

select row_to_json(t)
from t;
         row_to_json         
-----------------------------
 {"a":1,"b":"a_value"}
 {"a":2,"b":"another_value"}

如果您只需要第一行,并希望将其作为一组键/值对

select *
from json_each ((
    select row_to_json(t)
    from t
    limit 1
))
;
 key |   value   
-----+-----------
 a   | 1
 b   | "a_value"

答案 1 :(得分:0)

答案基于CRAIG RINGER的评论,使用“hstore”扩展名。
我想提出他的评论作为答案。

declare
    r record;
    h hstore;
begin
    select * into r from more_joined_tables;
    select * into h from hstore(r);
    raise notice '%',h;
end;

OR


declare
    r record;
    h record;
begin
    select * into r from price_list;
    for h in select * from each(hstore(r))
    loop
        raise notice '%',h;
    end loop;
end;