複数の子テーブルが継承するログテーブルがありますが、質問を説明するのは難しいです。始めましょう。
--1環境
PostgreSQLバージョン:9.0.3
OS:Red Hat EnterpriseLinuxServerリリース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>
そして、次のsqlcreate子テーブルを使用します。
create table tbl_log_201210 ( like tbl_log including all ) inherits ( tbl_log );
--3列テーブルを追加します
次に、何らかの理由で、親テーブルと子テーブルの両方に列を追加したいと思います。次のようなコマンドが必要です。
Alter table tbl_log add column address character varying(255) ;
--4pg_dump子テーブル
ここで、子の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のcreate tableコマンドには、「ALTERTABLE」コマンドによって追加された新しい列である列「addres」が含まれていません。
--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'。
理由はわかりませんが、それはバグですか?</ p>