Thread: Classes of returned rows

Classes of returned rows

From
Jeff Waugh
Date:
Hi all,

Is there a way of determining the original class of a row when querying
inherited tables? Consider:


CREATE TABLE users (
    uid int4 SERIAL PRIMARY KEY,
    email varchar(60)
);

CREATE TABLE clients (
    surname varchar(30)
    [etc]
) INHERITS (users);

CREATE TABLE suppliers (
    surname varchar(30)
    [etc]
) INHERITS (users);


Then, when I execute "SELECT * FROM users", I'd like to know which classes
each row belongs to, ie. suppliers, clients or users. Hopefully, as easy as
"SELECT oid, * FROM users" is!

I'm using 7.1 already, and it kicks arse. Many thanks to pgsql-hackers for a
wonderful piece of software I use every day. Thanks. :)

- Jeff

--
       "Can we have a special TELSABUG category, and everything gets
                 dropped to fix them first?" - Telsa Gwynne

Re: Classes of returned rows

From
Tom Lane
Date:
Jeff Waugh <jdub@aphid.net> writes:
> Is there a way of determining the original class of a row when querying
> inherited tables? Consider:

Use the "tableoid" pseudo-column.

            regards, tom lane

Re: Classes of returned rows

From
Jeff Waugh
Date:
<quote who="Tom Lane">

> Use the "tableoid" pseudo-column.

Ah! Awesome.

A little playing with pg_class, and we have table/class names too.
PostgreSQL has cool new things to find every day...

Thanks Tom!

- Jeff

--
        Web development with PHP is like injecting pure rust with a
                    high-pressure hose. For pain relief.

Re: Classes of returned rows

From
Peter Eisentraut
Date:
Jeff Waugh writes:

> Is there a way of determining the original class of a row when querying
> inherited tables?

Use the implicit tableoid column.

--
Peter Eisentraut   peter_e@gmx.net   http://funkturm.homeip.net/~peter


Re: Classes of returned rows

From
will trillich
Date:
On Thu, Apr 26, 2001 at 05:39:43PM +0200, Peter Eisentraut wrote:
> Jeff Waugh writes:
>
> > Is there a way of determining the original class of a row when querying
> > inherited tables?
>
> Use the implicit tableoid column.

okay, all i get from

    select c.relname,a.attname
    from pg_class c,pg_attribute a
    where a.attrelid=c.oid
        AND a.attname LIKE 'table%'
    order by attname,relname;

is

      relname   |  attname
    ------------+------------
     pg_indexes | tablename
     pg_rules   | tablename
     pg_tables  | tablename
     pg_tables  | tableowner

cmax, xmin and oid show up, but no tableoid.

is it a 7.1 thing? i'm using 7.0.3...

--

and anybody care to enlighten a greenhorn as to
where xmax/xmin and cmax/cmin come in useful?

--
don't visit this page. it's bad for you. take my expert word for it.
http://www.salon.com/people/col/pagl/2001/03/21/spring/index1.html

will@serensoft.com
http://sourceforge.net/projects/newbiedoc -- we need your brain!
http://www.dontUthink.com/ -- your brain needs us!

Re: Classes of returned rows

From
Jeff Waugh
Date:
<quote who="will trillich">

>     select c.relname,a.attname
>     from pg_class c,pg_attribute a
>     where a.attrelid=c.oid
>         AND a.attname LIKE 'table%'
>     order by attname,relname;

select pg_class.relname, *
    from users
    where pg_class.relfilenode = tableoid;

  relname  |  login   | passhash
-----------+----------+----------
 users     | user     | user
 users     | user2    | user2
 clients   | client   | client
 clients   | client2  | client2
 suppliers | supplier | supplier


Results from 7.1 :)

- Jeff

--
        Web development with PHP is like injecting pure rust with a
                    high-pressure hose. For pain relief.