pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Michael Fuhr <mike@fuhr.org>
To: Kai Hessing <kai.hessing@hobsons.de>
Cc: pgsql-sql@postgresql.org
Subject: Re: can a function return a virtual table?
Date: Mon, 18 Apr 2005 20:43:13 -0600
Message-ID: <20050419024313.GA75425@winnie.fuhr.org> (raw)
In-Reply-To: <3c4m1vF6b6e6aU1@individual.net>
References: <3c4m1vF6b6e6aU1@individual.net>

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/



view thread (6+ messages)  latest in thread

Message-ID: <20050419024313.GA75425@winnie.fuhr.org>
Permalink:  ../20050419024313.GA75425@winnie.fuhr.org/
Also on:    postgresql.org/message-id/20050419024313.GA75425@winnie.fuhr.org

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: mike@fuhr.org, kai.hessing@hobsons.de
  Subject: Re: can a function return a virtual table?
  In-Reply-To: <20050419024313.GA75425@winnie.fuhr.org>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox