"Hiroshi Inoue" <Inoue@tpf.co.jp> writes:
> create table t1 (i1 int4);
> create table t2 (i2 int4) inherits t1;
> create table t3 (i3 int4) inherits t2;
> alter table t1 add column i4 int4;
> For each table,the list of (column, logical number, physical number)
> would be as follows.
> t1 (i1, 1, 1) (i4, 2, 2)
> t2 (i1, 1, 1) (i4, 2, 3) (i2, 3, 2)
> t3 (i1, 1, 1) (i4, 2, 4) (i2, 3, 2) (i3, 4, 3)
> At this point the compilation of 'select * from t1(*?)' would mean
> select (physical #1),(physical #2) from t1 +
> select (physical #1),(physical #3) from t2 +
> select (physical #1),(physical #4) from t3
> Note that physical # aren't common for column i4.
That's no different from the current situation: the planner already must
(and does) adjust column numbers for each derived table while expanding
an inherited query. It's kind of a pain but hardly an insurmountable
problem.
Currently the matching is done by column name. We could possibly match
on logical column position instead --- not sure if that's better or
worse.
regards, tom lane