Re: Calling SQL functions that return sets
От | Chris Mungall |
---|---|
Тема | Re: Calling SQL functions that return sets |
Дата | |
Msg-id | Pine.OSX.4.58.0508011724380.14023@skerryvore.dhcp.lbl.gov обсуждение исходный текст |
Ответ на | Re: Calling SQL functions that return sets (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: Calling SQL functions that return sets
|
Список | pgsql-sql |
On Mon, 1 Aug 2005, Tom Lane wrote: > Chris Mungall <cjm@fruitfly.org> writes: > > What are the reasons for deprecating the use of the function in the > > SELECT clause? > > The semantics of having more than one set-returning function in the > target list are, um, poorly thought out. However, we haven't removed > the feature because (as you note) there are things you can't do any > other way. Would you recommend I press ahead and define views that make use of setof function calling in the select clause? I would need to be reasonably confident that if this is more strongly deprecated in future versions I can at least recode my views (using some as-yet-to-be-defined function definition and calling mechanism) and preserve their existing semantics. Is there any roadmap for how this will be handled in future versions? Understandably, this may not be a high priority. I'm sure you and the other developers have already thought a lot about this, but for what it's worth I'd like to pich in a vote for taking a prolog-esque approach here. In prolog, everything is a relation. A function taking two arguments is really just a 3-ary relation over (arg1,arg2,result). Thus functions that produce more than one value (eg sqrt) don't require any extensions to the relational model. I amn't the slightest bit familair with the Pg internals, and there may be some very good reasons that make this impractical. Coming back to earth, I have a more specific question which follows on from my initial question. If I have a function 'foo' which takes one argument and returns a setof some table or composite type, it seems I am unable to call the function from the select clause. SELECT foo(1,2);ERROR: set-valued function called in context that cannot accept a set SELECT mycol(foo(1,2));ERROR: set-valued function called in context that cannot accept a set It looks like I may be stuck anyway.... Cheers Chris > regards, tom lane >
В списке pgsql-sql по дате отправления: