[pgsql-jp: 29671] pg_dumpとpg_restoreのレコード数不一致

Takaharu Ogawa ogax @ pop02.odn.ne.jp
2003年 4月 18日 (金) 18:42:19 JST


OGAXと申します。いつもお世話になります。

pg_dumpとpg_restoreで性能測定をしていたところ、不可解な現象が
発生しました。
pg_dump実行時のレコード件数と、pg_restore後のレコード件数が
一致しないのです。

=実行したコマンドの内容=
$ cat test3.sh
createdb test
time pgbench -i -s 60 test
psql -d test -c 'select count(*) from accounts;'
time pg_dump -C -Fc test > test60.dump
dropdb test
time pg_restore -C -d template1 test60.dump
psql -d test -c 'select count(*) from accounts;'
=============

pgbenchのスケーリングファクタ(-sオプション)が20(200万レコード)までは
良いのですが、30,40,50,60で実験すると合致しません。
#pg_dumpで-dオプション(COPYではなくINSERT文にする)を付けた場合は
#問題ないようです。
#pg_dumpで-Fcオプションを指定しているので、pg_dumpしたファイル内の
#レコード数は確認できていません。

pg_dumpで-dオプションなしのダンプ・リストアは信頼性がないのでしょうか?

-dオプションを付けると、pg_restoreの所要時間が下記例の37分に対し、8時間
も掛かってしまうので、できれば-dなしにしたかったのですが...
PGDATAのディレクトリをNFS上に置いているのが原因なのかなとも考えています。

皆さん、ダンプ・リストアはどのようにされていますか?

【実行環境】
$ uname -srv
SunOS 5.8 Generic_108528-18
$ pg_config --version
PostgreSQL 7.2.3
$ pg_config --configure
--prefix=/usr/local/pgsql --enable-multibyte=EUC_JP --enable-syslog


以下、実行した時のログです。
---------------
$ test3.sh
CREATE DATABASE
creating tables...
10000 tuples done.
20000 tuples done.
(省略)
5990000 tuples done.
6000000 tuples done.
vacuum...done.

real    58:46.9
user       23.9
sys         1.5
  count  
---------
 6000000
(1 row)


real     9:36.1
user     2:34.6
sys         5.6
DROP DATABASE

real    36:55.6
user       59.1
sys         8.2
  count  
---------
 5999884  <- ここ
(1 row)

$ 
---------------




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