我有一个日志表,它有几个子表继承它。但我的问题很难描述。我们开始吧。
--1环境
PostgreSQL版本: 9.0.3
操作系统:红帽企业Linux服务器版本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。
我使用以下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子表
现在,我需要获得一个子表的create语句,所以我使用pg_dump获取ddl。
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的create命令不包含列"addres“,这是一个由"ALTER”命令添加的新列。
--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'。
我不知道为什么,那是窃听器吗?
发布于 2012-10-31 13:06:35
转储命令只请求子表的架构。子create
不包含任何列,而只包含inherits
。
CREATE TABLE child (
inherits parent
);
这有什么令人惊讶的?
编辑
like
参数的使用使两个表解耦。他们不是父母和孩子。检查手册
如果你在两个不同的步骤中这样做的话,它就能工作。先是create like
,然后是alter table inherit
发布于 2012-10-31 13:53:34
除了提到后面的两个主要版本之外,9.0.3是后面的七个bug修复版本。有人发布并删除了一个答复,显示这在9.2上的效果与预期的一样。我注意到9.0.7包括此承诺
用于更好地处理继承列的Fix pg_dump . 修改pg_dump对继承列的处理,这是在2001年认真研究的,以消除与继承的默认表达式和NOT NULL标志相关的几个错误行为。特别是,确保在子表的CREATE命令中打印列,当且仅当它具有attislocal = true;前一种行为有时会导致列在源数据库中没有被标记为attislocal时标记为attislocal。另外,停止依赖于默认表达式的文本比较来决定它们是否是继承的;相反,根本不要使用默认表达式继承,而只是在层次结构的每个级别显式地安装默认表达式。这修复了Chester Young最近展示的与搜索路径相关的错误行为,并消除了关于ALTER默认命令执行顺序的一些可疑假设。 向所有支持的分支返回修补程序。
发布说明指出,这是为处理默认处理而添加的,但我怀疑此修补程序也解决了您的问题。您能升级到9.0.10并查看这种行为是否仍然存在吗?
https://stackoverflow.com/questions/13157466
复制相似问题