Thread: Postgres inherited table, some questions...

Postgres inherited table, some questions...

From
"Net Virtual Mailing Lists"
Date:
Hello,

I am playing with the "INHERITS" functionality of create table to
determine its suitability to my needs and I've hit a roadblock (hopefully
minor)...

If I have two tables like this:

CREATE TABLE tablea (
    id SERIAL
);

CREATE TABLE tableb () INHERITS (tablea);

#1. Now first of all, I notice that if I insert something into tableb, it
appears in tablea and if I insert something in tablea, it does not appear
in tableb...   Is this correct and will the use of the "SERIAL" type
cause any confusion or can I insert rows in each table without being
concerned about any internal ramifications of this?

#2. If I do "explain select id from tablea where id=4", I get something
like this:

                      QUERY PLAN
-------------------------------------------------------
 Seq Scan on jobdata  (cost=0.00..1.04 rows=1 width=4)
   Filter: (id = 4)


...If, however, I do "explain select id from tableb where id=4":

-------------------------------------
------------------------------------------------
 Result  (cost=0.00..2.08 rows=2 width=4)
   ->  Append  (cost=0.00..2.08 rows=2 width=4)
         ->  Seq Scan on jobdata_revisions  (cost=0.00..1.04 rows=1 width=4)
               Filter: (id = 4)
         ->  Seq Scan on jobdata jobdata_revisions  (cost=0.00..1.04
rows=1 width=4)
               Filter: (id = 4)


I'm a bit mystified by the results of tableb, I don't understand what the
"Append" and the second "Seq Scan" is for... More importantly, I'm not
sure how to optimize this properly...

Any ideas what I can do here?...

Thanks!

- Greg




Re: Postgres inherited table, some questions...

From
"Net Virtual Mailing Lists"
Date:
Hello,

I hate to re-ask this again (sorry to be repetitive!)... I really could
use some help with this, if anyone is familiar with table inheritance as
it applies to my questions....

Thanks!

- Greg

>Hello,
>
>I am playing with the "INHERITS" functionality of create table to
>determine its suitability to my needs and I've hit a roadblock (hopefully
>minor)...
>
>If I have two tables like this:
>
>CREATE TABLE tablea (
>    id SERIAL
>);
>
>CREATE TABLE tableb () INHERITS (tablea);
>
>#1. Now first of all, I notice that if I insert something into tableb, it
>appears in tablea and if I insert something in tablea, it does not appear
>in tableb...   Is this correct and will the use of the "SERIAL" type
>cause any confusion or can I insert rows in each table without being
>concerned about any internal ramifications of this?
>
>#2. If I do "explain select id from tablea where id=4", I get something
>like this:
>
>                      QUERY PLAN
>-------------------------------------------------------
> Seq Scan on jobdata  (cost=0.00..1.04 rows=1 width=4)
>   Filter: (id = 4)
>
>
>...If, however, I do "explain select id from tableb where id=4":
>
>-------------------------------------
>------------------------------------------------
> Result  (cost=0.00..2.08 rows=2 width=4)
>   ->  Append  (cost=0.00..2.08 rows=2 width=4)
>         ->  Seq Scan on jobdata_revisions  (cost=0.00..1.04 rows=1 width=4)
>               Filter: (id = 4)
>         ->  Seq Scan on jobdata jobdata_revisions  (cost=0.00..1.04
>rows=1 width=4)
>               Filter: (id = 4)
>
>
>I'm a bit mystified by the results of tableb, I don't understand what the
>"Append" and the second "Seq Scan" is for... More importantly, I'm not
>sure how to optimize this properly...
>
>Any ideas what I can do here?...
>
>Thanks!
>
>- Greg
>



Re: Postgres inherited table, some questions...

From
Thomas F.O'Connell
Date:
Well, considering that the EXPLAIN tables are different from
tablea/tableb, I can only assume that your jobdata tables follow the
same pattern.

Are you familiar with the ONLY syntax for SELECT when using
inheritance? It looks like you might need to SELECT ONLY ... FROM
tableb.

-tfo

On Sep 29, 2004, at 12:10 PM, Net Virtual Mailing Lists wrote:

> Hello,
>
> I hate to re-ask this again (sorry to be repetitive!)... I really could
> use some help with this, if anyone is familiar with table inheritance
> as
> it applies to my questions....
>
> Thanks!
>
> - Greg
>
>> Hello,
>>
>> I am playing with the "INHERITS" functionality of create table to
>> determine its suitability to my needs and I've hit a roadblock
>> (hopefully
>> minor)...
>>
>> If I have two tables like this:
>>
>> CREATE TABLE tablea (
>>    id SERIAL
>> );
>>
>> CREATE TABLE tableb () INHERITS (tablea);
>>
>> #1. Now first of all, I notice that if I insert something into
>> tableb, it
>> appears in tablea and if I insert something in tablea, it does not
>> appear
>> in tableb...   Is this correct and will the use of the "SERIAL" type
>> cause any confusion or can I insert rows in each table without being
>> concerned about any internal ramifications of this?
>>
>> #2. If I do "explain select id from tablea where id=4", I get
>> something
>> like this:
>>
>>                      QUERY PLAN
>> -------------------------------------------------------
>> Seq Scan on jobdata  (cost=0.00..1.04 rows=1 width=4)
>>   Filter: (id = 4)
>>
>>
>> ...If, however, I do "explain select id from tableb where id=4":
>>
>> -------------------------------------
>> ------------------------------------------------
>> Result  (cost=0.00..2.08 rows=2 width=4)
>>   ->  Append  (cost=0.00..2.08 rows=2 width=4)
>>         ->  Seq Scan on jobdata_revisions  (cost=0.00..1.04 rows=1
>> width=4)
>>               Filter: (id = 4)
>>         ->  Seq Scan on jobdata jobdata_revisions  (cost=0.00..1.04
>> rows=1 width=4)
>>               Filter: (id = 4)
>>
>>
>> I'm a bit mystified by the results of tableb, I don't understand what
>> the
>> "Append" and the second "Seq Scan" is for... More importantly, I'm not
>> sure how to optimize this properly...
>>
>> Any ideas what I can do here?...
>>
>> Thanks!
>>
>> - Greg
>>
>
>
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 7: don't forget to increase your free space map settings