• 締切済み

ダンプリストア時のDBデータ不整合

環境 CentOS5系 64bit DBバージョン 8.3.3 本番DBサーバからpg_dump -c -D でダンプしたデータを、ローカルテストDBサーバ へpsql にてリストアした際、データ不整合が、一部のテーブルに発生しました。 前のデータが一部クリアされずに残っている状況です。 ダンプのデータは、DBの内容と同じなのですが。 因みに、pg_dump パラメータ無しのダンプのリストアでは、発生しません。 何が、原因でしょうか? もしかしてバグ? ご教授願えれば幸いです。 宜しくお願い致します。

みんなの回答

  • alte_6
  • ベストアンサー率60% (9/15)
回答No.1

pg_dump した時エラーメッセージはでてないのかな? なにかメッセージが出てるならおそらくバグでは無いです。 pg_restore -cでリストアしてはどうでしょうか。

JACK_TOSHI
質問者

お礼

alte_6さん、早々ご回答ありがとう御座います。 この投稿をした後、ログに気付きログを確認して自己解決しています。 ローカルテスト機のデータベースに新たにテーブルが追加されていまして、 それの依存関係により、エラーが発生しデータ不整合を起こしていました。 お騒がせ致しました。 ありがとうございました。

関連するQ&A

  • pg_dumpの文字化け

    PostgreSQLのpg_dumpを用いたバックアップで困っています。 OSはVineLinux 2.2.17-0vl10です。 あるサーバ(PostgreSQL7.0.2)のデータベースtest_db(EUC_JP)に対して、 pg_dump -D -v -i -f test.dump test.db でダンプファイルを作成しました。 COPYでは不確実な場合があるということでINSERT文で出力しました。 (データの日本語の部分が数字に変換されています) それを別のサーバ(PostgreSQL8.2.5)のデータベースtest2_db(EUC_JP)にリストアしました。 psql test2_db < test.dump すると、"(株)"という文字を含む文字列が化けてしまっていました。 同じレコードの他のカラムは大丈夫です。 このような場合の対策がありましたら教えていただきたいと思います。 宜しくお願いします。

  • pg_dumpでデータの引越し

    こんにちは。postgreSQL初心者です。 古いサーバからpostgreSQLのデータを pg_dumpもしくは、pg_dumpallで取り出し、新しいサーバに入れようとしてるのですが、以下のようなエラーが出てデータが入ってくれません。 ERROR: invalid byte sequence for encoding "UTF8": 0x8a HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding". 文字コードの問題だと思うのですが、バージョンの違いや基本的な設定も関係あるのでしょうか? 環境 旧サーバ:Red hat Linux 9, postgreSQL 8.0 移転先サーバ:Fedora Core 6, postgreSQL 8.1 実行コマンド ダンプ pg_dump -d DB_NAME > FILE_NAME ※ファイルの中身はちゃんと出力されています。 リストア(?というのでしょうか?) 方法1: \i FILE_NAME > DB_NAME 方法2:cat FILE_NAME  | psql DB_NAME 両方ともエラーがでて、テーブルはできていても一部の中身が入りません。 行き詰まってしまっています。どうか宜しくお願いします。 また、現在設定されている文字コードを調べる方法や、お勧めの参考ホームページがございましたら教えてください。

  • psqlでのリストアの仕方

    Windows上でPostgreSQL8.0を使用しています。 DBのバックアップを毎日自動で(タスク登録して)とっています。 具体的にはバッチファイルの中で以下のようなpg_dumpコマンドを実行させています。 「pg_dump -U ユーザー名 -f %DATE:~0,4%%DATE:~5,2%%DATE:~8,2%EXPDAT.db DB名 <dmp.txt」(なお、最後のテキストファイル内にはたぶんパスワードと思われる内容が記載されています。) 通常はAdminIIIを使用してバックアップおよびリストアを行っており、上記のバッチ実行にて作成されたダンプファイルからのリストアを行ったことがありません。(拡張子がBackupでないので、AdminIIIからのリストアはできませんでした) ヘルプや書籍を参考に、psqlからのリストアを試みたのですが、そもそもどのようにコマンドを入力してよいかわかりません。 試した内容は以下の通りです。 1.psql.exeを実行 2.ホスト名、ユーザー名、パスワード、データベース名をそれぞれ入力 3.データベース名#> が表示されるので、「psql -U ユーザー名 -d データベース名 -f "c:\20070822EXPDAT.db"」と入力し実行すると、psqlという文字列に対してsyntaxエラーとなってしまいました。 そもそも、psql画面でのコマンドの入力方法がよくわかっておりません。書籍などをみるとよく「psql -U xxx -d xxx -f xxx」と書いてありますが、実際に入力するのはどこからでしょう? 担当者が退社してしまい、手探り状態で運用し始めたところです。 大変初歩的な質問で申し訳ありませんがよろしくお願いいたします。

  • postgresのリストアでDBを自動作成する方法

    質問させてください。 例えば、以下のコマンドを実行してpostgreSQLでリストアをするとします psql -h localhost -U postgres -d testdb この場合、testdbというDBを作成していないと、エラーになります。 DBまで自動的に作成するコマンドはありませんでしょうか。 psql、pg_restoreの両方でお聞きしたいです。

  • バックアップとリストアについてのエラー

    最近、DBを勉強し始めた、初心者です。 現在、pg_dumpコマンドでデータをバックアップして、リストアしようと試みています。DBのデータ容量が小さいうちは、問題なくリストアできるのですが、DBのデータの容量が大きくなってくると、「No buffer space available」とエラー表示されます。 この問題を解決するには、どうしたらいいのでしょうか? 詳しい方がいましたら、教えて下さい。 よろしくお願いします。

  • pg_dumpの指定パラメータ

    現在、DBをバージョンアップすべく検証等をしている最中なのですが。。。 現7.4.7 → 8.3.1へ移行に当たりpg_dumpのリストアにて作業をしているのですが、 pg_dumpパラメータに -c -D を附帯させてダンプした物をリストアするとサーバ用途モデルのマシンは信じられないくらい時間を要します。 附帯無し、所要時間約1分 → 附帯有り 所要時間約130分 附帯有りの所要時間は、10年前のPCでさえも60分で完了するのに その倍以上時間を要しています。 それで、そもそも同じPostgreSQLであるならばバージョンは違えども別のRDBMSではないので パラメータに -d -D は附帯させる必要性は、全く無いのでしょうか? ご教授願えれば幸いです。宜しくお願い致します。

  • pg_dumpではかれたテキストファイルを実行もデータの移行失敗

    DBを開発環境から、本番環境へ移行する際、pg_dumpではかれたデータを元に、pg_restoreで復元しようとした所、エラーが出て、うまくいかず。pg_dumpをtxt形式で出力させ、それを実行させました。 結論から言うとテーブルは全て作成されましたが、データの移行が出来ていませんでした。エラーは出ていませんが、COPYコマンドがうまくいっていないようでした。 開発環境がPostgres8.xで本番環境がPostgres7.4.3なのが影響している可能性が高いと判断してますが、どなたかわかる人はおりませんでしょうか。

  • テーブル単位のリストア

    pg_dumpall > [出力ファイル名] で作成したバックアップからテーブル単位でリストアする方法はないのでしょうか? pg_dumpallのマニュアルを読むと、リストアはpsqlで行うことになっていますが、psqlのマニュアルには テーブル単位で取り出すオプションなどはないようです。 また:pg_dumpallで作成したファイルを: pg_restore -l [入力ファイル名] の入力ファイルにすると、"pg_restore: [archiver] input file does not appear to be a valid archive" エラーが発生します。 webでも調べてみたのですが、該当するページが見あたりません。 お手数ですがご教授ください。

  • Linux上のpostgreSQLデータをWindowsでみたい

    サーバA(OS:Linux Fedora Core 4、データベース:PostgreSQL 8.0 で運用しているシステムがあり、毎日そのデータを下記のdumpコマンドで PostgreSQLの全データをバックアップしています pg_dumpall > postgres.out  サーバAを触るのは怖いので、別のマシンB(Windows-Xp)に postgresql-8.2.6をインストールしました。 このバージョンは、postgresqlとともに、pgAdmin3というGUIの管理 ツールもついていると聞きここに、サーバAからバックアップされている postgres.outをrestoreして pgAdmin3でデータベース・テーブル等をみようとしています (postgres.out)を使ってのリストアの仕方は (1)(postgres.out)をpostgresqlの/binディレクトリの中に入れる (2)psqlのメニューから次のコマンドを打つ psql -d manmg -f postgres.out   (3)pgAdmin3を立ち上げるとサーバAのDBは追加されているようなのですが  テーブルは(0)となって見えません マシンBの方のPostgreSQLについてはインストールしたままでサーバA のpostgresqlの設定等は何もしていません 何か設定する所はあるのでしょうか 上記手順でlinuxから吐出されたバックアップデータをWindowマシンに リストアする方法は間違っていないのでしょうか よろしくお願いします。

  • pg_restoreでエラー

    こんにちは。 PostgreSQL8.1.10を使っています。 pg_dumpでバックアップしたデータをpg_restoreでリストアするときに、エラーと警告が出てしまいます。 $ pg_dump -F c mydb > db.dump $ dropdb mydb $ pg_restore -C -d postgres db.dump pg_restore: [アーカイバ(db)] TOC処理中にエラーがありました: pg_restore: [アーカイバ(db)] TOCエントリ1514; 0 0 COMMENT SCHEMA public postgresのエラーです pg_restore: [アーカイバ(db)] could not execute query: ERROR: スキーマpublicの所有者でなければなりません Command was: COMMENT ON SCHEMA public IS 'Standard public schema'; pg_restore: WARNING: 権限を取り上げられませんでした pg_restore: WARNING: 権限を取り上げられませんでした pg_restore: WARNING: 権限は付与されませんでした pg_restore: WARNING: 権限は付与されませんでした 警告: リストアにてエラーを無視しました: 1 結果を確認した限りではリストアはされているようなのですが気になります。 このエラーはどういった理由で発生しているのでしょうか。 エラーを出さなくする方法はあるのでしょうか。 無視していいものならそれでも構わないのですが、理由は知っておきたいです。