From: | Michael Fuhr <mike(at)fuhr(dot)org> |
---|---|
To: | Kai Hessing <kai(dot)hessing(at)hobsons(dot)de> |
Cc: | pgsql-sql(at)postgresql(dot)org |
Subject: | Re: can a function return a virtual table? |
Date: | 2005-04-19 02:43:13 |
Message-ID: | 20050419024313.GA75425@winnie.fuhr.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
On Wed, Apr 13, 2005 at 03:44:25PM +0200, Kai Hessing wrote:
>
> This is the question i'm telling myself. It is because we don't really
> delete table entries, just setting a status field to '-1'. So a valid
> select would look like: SELECT xyz, abc FROM (SELECT * FROM tablex WHERE
> status > -1);
I'll pick a nit and point out that the above isn't a valid query:
test=> SELECT xyz, abc FROM (SELECT * FROM tablex WHERE status > -1);
ERROR: subquery in FROM must have an alias
HINT: For example, FROM (SELECT ...) [AS] foo.
In this simple example you could omit the subquery altogether:
SELECT xyz, abc FROM tablex WHERE status > -1;
> It would be much nicer to have to write something like: SELECT xyz, abc
> FROM active(tablex); where the function 'active(x)' returns a virtual
> table with all entries from table x where status is > -1. But sadly I
> have no idea how write such a function. Good old O'reilly can't help (or
> i'm to dumb *g*).
See the documentation for writing set-returning functions (SRFs).
The following links should get you started (if you're using a version
of PostgreSQL older than 8.0, then see the documentation for that
version):
http://www.postgresql.org/docs/8.0/interactive/queries-table-expressions.html#QUERIES-TABLEFUNCTIONS
http://www.postgresql.org/docs/8.0/interactive/xfunc-sql.html#AEN29503
http://www.postgresql.org/docs/8.0/interactive/plpgsql-control-structures.html#AEN32823
Another possibility would be to use views. You'd need to create a
view on each table.
http://www.postgresql.org/docs/8.0/interactive/tutorial-views.html
http://www.postgresql.org/docs/8.0/interactive/sql-createview.html
Yet another possibility would be to move the inactive rows to a
separate table. You could reconstruct the original table with a
UNION of the active and inactive tables.
http://www.postgresql.org/docs/8.0/interactive/queries-union.html
--
Michael Fuhr
http://www.fuhr.org/~mfuhr/
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2005-04-19 02:59:49 | Re: Getting the output of a function used in a where clause |
Previous Message | Rod Taylor | 2005-04-19 02:19:24 | Re: SQL subquery (count distinct) - Any Ideas? |