From: | "Naoya Anzai" <anzai-naoya(at)mxu(dot)nes(dot)nec(dot)co(dot)jp> |
---|---|
To: | pgsql-bugs(at)postgresql(dot)org |
Subject: | BUG #5856: pg_attribute.attinhcount is not correct. |
Date: | 2011-01-31 11:42:31 |
Message-ID: | 201101311142.p0VBgVGd019556@wwwmaster.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs pgsql-hackers |
The following bug has been logged online:
Bug reference: 5856
Logged by: Naoya Anzai
Email address: anzai-naoya(at)mxu(dot)nes(dot)nec(dot)co(dot)jp
PostgreSQL version: 8.4.5
Operating system: Red Hat Enterprise Linux Server release 5.5
Description: pg_attribute.attinhcount is not correct.
Details:
In PostgreSQL8.4.5, I found that the catalog pg_attribute.attinhcount is not
correct.
I executed the following queries.
--------------------------------------------------------------------------
create table "3_grandchild"();
create table "2_child"();
create table "1_parent"();
alter table "3_grandchild" inherit "2_child";
alter table "2_child" inherit "1_parent";
alter table "3_grandchild" add column c1 text;
alter table "2_child" add column c1 text;
alter table "1_parent" add column c1 text;
select c.relname,a.attname,a.attinhcount from pg_attribute a,pg_class c
where a.attrelid=c.oid
and relname in ('1_parent','2_child','3_grandchild')
and attname not in('xmax','xmin','cmin','cmax','tableoid','ctid')
order by relname;
relname | attname | attinhcount
--------------+---------+-------------
1_parent | c1 | 0
2_child | c1 | 1
3_grandchild | c1 | 2
(3 rows)
--------------------------------------------------------------------------
"3_grandchild"'s attinhcount should be 1.
When column "c1" is added to "1_parent", "ATExecAddColumn" is
executed for "2_child" and "3_grandchild" too.
If column "c1" already exists on "2_child" and "3_grandchild",
"ATExecAddColumn" increment pg_attribute.attinhcount of "c1".
childatt->attinhcount++; # src/backend/commands/tablecmds.c:3560
But pg_attribute.attinhcount should be the number of parent table (column)
that inherited directly.
So pg_attribute.attinhcount of "3_grandchild"."c1" should not be
incremented.
In this case,an error occurs when the following operations are
executed.
--------------------------------------------------------------------------
alter table "1_parent" drop column c1;
alter table "2_child" drop column c1;
alter table "3_grandchild" drop column c1;
ERROR: cannot drop inherited column "c1"
select c.relname,a.attname,a.attinhcount from pg_attribute a,pg_class c
where a.attrelid=c.oid
and relname in ('1_parent','2_child','3_grandchild')
and attname not in('xmax','xmin','cmin','cmax','tableoid','ctid')
order by relname;
relname | attname | attinhcount
--------------+---------+-------------
1_parent | c1 | 0
2_child | c1 | 0
3_grandchild | c1 | 1
(3 rows)
--------------------------------------------------------------------------
From | Date | Subject | |
---|---|---|---|
Next Message | Stuart Bishop | 2011-01-31 13:44:59 | BUG #5857: pg_restore --clean dropping type too soon |
Previous Message | Robert Haas | 2011-01-31 01:33:03 | Re: BUG #5847: pg_restore: [archiver (db)] COPY failed: ERROR: invalid byte sequence for encoding "UTF8": 0x96 |
From | Date | Subject | |
---|---|---|---|
Next Message | Dan Ports | 2011-01-31 11:50:28 | Re: SSI patch version 14 |
Previous Message | Dimitri Fontaine | 2011-01-31 10:21:09 | Re: Extensions support for pg_dump, patch v27 |