[pgsql-jp: 26807] Re: リストアでデータの復元が出来ない!

dodo_new dodo @ o-su.com.au
2002年 7月 24日 (水) 11:54:45 JST


TCMS 百々です

私は以前 7.0.3 から 7.2.1 に移行する際、状況は違うのですが
悩んだ事があり、もしかすると関係あるかもと思いメールします。

私も以前は pg_dumpall を利用して

pg_dumpall  > db.out

として
psql -d template1 < db.out

と復元しようとしたのですが、いつくかのカラムが正常に
復元できず、困ったことになりました。

結局、原因はinheritされたテーブルにalter table を使ってあとから
カラム を追加した場合、バックアップデータでカラムが入れ替わる
というものでした。

例えば
tbl_base が
aaa text;
bbb text
ccc text

となっているとして

create table tbl_1(
ddd text
)inherits(tbl_base);

を作ったとします。その後

alter table tbl_1 add column eee text;

とすると、 psql で \d tbl1 とした場合

aaa text;
bbb text
ccc text
ddd text;
eee text;

と表示されるのですが、バックアップデータの中の
tbl_1のcreate文では、

create table tbl_1(
eee text,
ddd text
)inherits(tbl_base);

となっており、ddd と eee が入れ替わっています。
これでは copy では復元できないのは当たり前です。

解決手段として、私は pg_dumpall ではなく pg_dump を
使い -D を指定してバックアップし直しました。
マニュアルにはこうあります

-D, --attribute-inserts
データを明示的にカラム名を付けた INSERT コマンドとしてダンプします。これはリストアをとても遅くしま
す。

高橋さんの場合、バックアップデータのいくつかのカラムが
消えているそうなので、原因は違うと思いますが、もしinheritsや
alter table を使用していたら、また別の原因も考えられます。

一度、レファレンスマニュアルをご覧になってはいががでしょうか?

http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/reference.html

↑のpg_dump pg_dumpall pg_restore の項目が参考になるかと思います。

また、データが飛んでバックアップから復元、という状況でもないので
一度、簡単なテーブルを作成してテストされる事をお勧めいたします。







pgsql-jp メーリングリストの案内