From: | "Merlin Moncure" <mmoncure(at)gmail(dot)com> |
---|---|
To: | Christian Schröder <cs(at)deriva(dot)de> |
Cc: | PostgreSQL <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: Polymorphic "setof record" function? |
Date: | 2009-01-14 16:46:29 |
Message-ID: | b42b73150901140846y11a22486r8793f23105145111@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On 1/13/09, Christian Schröder <cs(at)deriva(dot)de> wrote:
> Hi list,
> I have written a function that returns a setof record. The function has a
> table name as a parameter and the resulting records have the same structure
> as this table. Is there any easy way to specify this when I call the
> function? If the table has many columns then it's annoying to specify all of
> them.
> I need something like:
> select * from myfunc('mytable') as x(like mytable)
> or
> select * from myfunc('mytable') as x(mytable%TYPE)
>
> Is there any solution for PostgreSQL 8.2?
Unfortunately to the best of my knowledge there is no way to do this.
I think what you want is to have sql functions that specialize on
type in the way that templates do in C++.
This is _not_ the same as polymorhphic functions(anyelement, etc),
because you would _end_up_with_as_separate_plan_per_type_ (and other
reasons). Polymorphic functions are more similar to how inheritance
in c++ works...you operate on the 'base' type.
The type inferring operator (%type) is only part of the problem, you
need to be able to create functions that it is known to the planner
that it's template style:
IMHO, this is a better abstraction than our current anyX pseudotypes,
outside of the anyarray tricks.
merlin
From | Date | Subject | |
---|---|---|---|
Next Message | Roderick A. Anderson | 2009-01-14 17:30:17 | Re: Multi-tenant cluster |
Previous Message | Gerhard Heift | 2009-01-14 14:52:46 | fire trigger for a row without update? |