我有一个日志表,它有几个子表继承它。但我的问题很难描述。让我们开始吧。
--1 环境
PostgreSQL 版本:9.0.3
操作系统:Red Hat Enterprise Linux Server 5.5 版
--2 父表和子表
Schema | Name | Type | Owner | Size | Description
--------+-----------------------------+-------+--------+---------+----------------
suplog | tbl_log | table | suplog | 0 bytes | qq自更新日志表
suplog | tbl_log_201205 | table | suplog | 59 GB |
suplog | tbl_log_201206 | table | suplog | 58 GB |
suplog | tbl_log_201207 | table | suplog | 57 GB |
suplog | tbl_log_201208 | table | suplog | 51 GB |
suplog | tbl_log_201209 | table | suplog | 39 GB |
suplog | tbl_log_201210 | table | suplog | 36 GB |
tbl_log 为父表,所有 xxx__yyyymm 为子表,继承表 tbl_log。</p>
我使用以下 sql 创建子表:
create table tbl_log_201210 ( like tbl_log including all ) inherits ( tbl_log );
--3 添加列表
然后由于某种原因,我们想在父表和子表中都添加一列。我们只需要一个命令,如下:
Alter table tbl_log add column address character varying(255) ;
--4 pg_dump 子表
现在,我需要获取一个child的create table语句,所以我使用pg_dump获取ddl。</p>
pg_dump -h 127.0.0.1 -p 1921 -E UTF8 -t "suplog.tbl_log_201210" -s -v suplog > suplog.tbl_log_201210.ddl
从上面的命令,令我惊讶的是,文件 suplog.tbl_log_201210.ddl 的创建表命令不包含列“addres”,这是由“ALTER TABLE”命令添加的新列。
--5 查询查看pg_attribute
suplog=> select attname,attislocal from pg_attribute where attrelid='tbl_log_201210'::regclass
and attname='address';
attname | attislocal
-----------------+------------
recommend_appid | f
we can see the column attislocal of view pg_attribute of that table show 'f'。
不知道为什么,是bug吗?</p>