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 по дате отправления: