Postgres inherited table, some questions...
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
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
Show quoted text
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
Import Notes
Reply to msg id not found: 20040924165626.0ED465AF2CA@svr4.postgresql.orgReference msg id not found: 20040924165626.0ED465AF2CA@svr4.postgresql.org | Resolved by subject fallback
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:
Show quoted text
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