2014-09-03 6 views
0

Мне нужно сообщить записи с помощью «уведомления о повышении», но включая имена элементов.Есть ли в plpgsql возможность получить имена записей и использовать их?

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; 
+1

Для доступа к полям в записи только в настоящее время поддерживается метод, AFAIK, это 'hstore (ЗАП)'. Который теряет информацию о типе. С удачей мы можем улучшить его, используя поддержку json. –

+0

Это выглядит очень многообещающе. Вероятно, это решает мою проблему. Спасибо. – Hink

ответ

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; 

ИЛИ

 

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; 

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" 
+0

Хорошая попытка, но первичная, мне нужно это быстро для процедур отладки. Когда multi-table select with joins возвращает запись. Мне действительно нужно отобразить запись, но список значений без имен столбцов непрозрачен. – Hink

+0

@Hink: Оба решения в моем ответе показывают имена столбцов. –