Re: Passing tabular data around using python functions

Поиск
Список
Период
Сортировка
От Jan Urbański
Тема Re: Passing tabular data around using python functions
Дата
Msg-id 5017A802.7080008@wulczer.org
обсуждение исходный текст
Ответ на Passing tabular data around using python functions  (Achim Domma <domma@procoders.net>)
Список pgsql-hackers
On 30/07/12 14:33, Achim Domma wrote:
> Hi,

Hi Achim,

this list is meant for discussing the development of PostgreSQL, in the 
future you might want to ask your question on pgsql-general.

However, to answer your question:

> I call the function like this:
>
> select * from vectormatch(array(select (docid,conceptid,rank)::fps from fps where docid = 4205591))
>
> and get the following output:
>
> NOTICE:<type 'list'>
> CONTEXT:  PL/Python function "vectormatch"
> NOTICE:  ['(4205591,1,1)', '(4205591,1219,1)', ...]
> CONTEXT:  PL/Python function "vectormatch"
>
> I'm quite surprised that there are strings in the list and not tuples!? I tried my best, but I have no idea what I
mightbe doing wrong. The main purpose of my sample/experiment is, to pass the results of a query to a function and to
processit there. Any hint would be very appreciated.
 

Yes, it's a missing feature of PL/Python, but in your case you could 
work around it by writing your function like this:

create or replace function vectormatch(docid integer[], conceptid 
integer[], rank float4[])    returns table(docid integer, weigth float4)
as $$    data = zip(docid, conceptid, rank)    plpy.notice(data)    ...
$$ language plpythonu;

and then calling it like this:

select vectormatch(array_agg(docid), array_agg(conceptid), 
array_agg(rank)) from fps where docid = 4205591;

Cheers,
Jan


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Qi Huang
Дата:
Сообщение: [patch] pg_stat_lwlocks view - lwlocks statistics
Следующее
От: Amit kapila
Дата:
Сообщение: [PATCH] Patch to compute Max LSN of Data Pages