Skip site navigation (1) Skip section navigation (2)

Peripheral Links

Header And Logo

PostgreSQL
| The world's most advanced open source database.

Site Navigation

Search archives
  Advanced Search

Re: Cast as compound type


  • From: "korry" <korry(dot)douglas(at)enterprisedb(dot)com>
  • To: "David Fetter" <david(at)fetter(dot)org>
  • Cc: "PG Hackers" <pgsql-hackers(at)postgresql(dot)org>
  • Subject: Re: Cast as compound type
  • Date: Mon, 31 Mar 2008 19:18:43 -0400
  • Message-id: <47F17153.60507@enterprisedb.com> <text/plain>

David Fetter wrote:
I'd like to take a whack at making set-returning functions returning
SETOF RECORD a little more fun to use.  Let's imagine that we have a
table foo and a function returning SETOF RECORD that can return foos.
The call might look something like:

SELECT a, b, c
FROM f(ROW OF foo)
WHERE ...;

This would make it much easier and less error-prone to use SETOF
RECORD.
David, it sounds like you really want to declare the return type of the function? In your above example, you want to say that, in this particular invocation, function f() returns a SETOF foo's. Is that correct?

If you were to create function that returns a RECORD (not a SETOF RECORD), you would call it like this:

   SELECT * FROM f() AS (column1 type1, column2 type2, column3 type3);

In your case, I think you want to declare the return type using an explicitly defined composite type (possibly a table row); which would imply syntax such as:

   SELECT * FROM f() AS (foo);
      or
   SELECT * FROM f() AS (foo.*);

So, it seems like you want the syntax to look more like:

   SELECT a,b,c, FROM f() AS (SETOF foo);

Does that make sense to you? Your original syntax implied that the "ROW OF foo" was somehow related to the function arguments. -- Korry


--

 Korry Douglas  <korryd(at)enterprisedb(dot)com>
 EnterpriseDB    http://www.enterprisedb.com




Home | Main Index | Thread Index

Privacy Policy | About PostgreSQL
Copyright © 1996 – 2012 PostgreSQL Global Development Group