web-dev-qa-db-ja.com

PostgreSQLデータベースのファイルシステムレベルのコピー(ダンプではない)を別のPCに復元する方法

私はPostgreSQLを初めて使用します。未亡人XPマシンで実行されていたデータベースを回復する必要があります。

PostgresのZipフォルダがあります。

別のPCでpostgresインストールを抽出し、initDBの使用を開始して新しいデータベースを作成しました。ログインできましたが、古いテーブルが表示されません。

別のWindows XPマシンでサーバーを起動するために使用した手順と、古いデータフォルダー内のテーブルとデータを回復する方法を投稿してください。

3
Muthuvel P

理想的には、pg_dumpを使用してダンプを作成すると、これがはるかに簡単になります。悪いオフィスの人々、クッキーなし。

同じリリースのバイナリがあるので、面倒な作業を省くことができます。

  • 通常のユーザーアカウントとして完全な読み取り/書き込み権限がある場合は、バックアップディレクトリを便利な場所に解凍します。デスクトップ上にあると仮定します:C:\Users\Myusername\Desktop\postgresql-この例の目的のため。

c:\users\myusername\desktop\postgresqlフォルダーにbindatalibなどの名前のフォルダーが含まれていると仮定します。

  • cmd.exeシェルを開きます

  • cd Desktop\postgresql

  • bin\pg_ctl.exe start -D C:\users\myusername\desktop\postgresql\data

  • bin\psql.exe -U mydbusername mydb

Psqlが\qコマンドでOK切断に接続した場合、データベースのダンプをすぐに作成します。

  • bin\pg_dump.exe -Fc -U mydbusername -f mydb.dbbackup mydb

...そして、現在のリリースのpg_restoreを使用して、それを最新のPostgreSQLリリースに復元します。

9.0や9.1などの新しいリリースへの復元で問題が発生した場合は、8.2のpg_dumpを使用してダンプを作成するのではなく、新しいリリースのpg_dumpを使用して古いデータベースに接続してダンプを作成する必要があります。ネットワーク経由でダンプするように設定したくない場合は、pg_dumpを新しいマシンから古いマシンにコピーできます。 「bin」ディレクトリ全体を新しいPostgreSQLリリースから古いマシンのどこかにコピーし、そこからpg_dumpを実行するだけです。 pg_dump.exeだけをコピーすると、libpqと他のライブラリが必要になるため機能しません。

not8.2を実行し続けるようにしてください。これは、廃止され、サポートされていないリリースです。 9.0または9.1に乗ります。これには、コードの変更が必要になる場合があります。アップグレード情報については、8.3.0、8.4.0、9.0.0、および9.1.0など、ご使用以降のメジャー.0リリースごとに リリースノート を参照してください。

バックアップ手順をすぐに修正して、毎日のpg_dumpをスケジュールし、これが二度と起こらないようにします

PostgreSQLバイナリを持っていなかった場合は、次のようにします。あなたがZipファイルにバイナリを持っているのを見たとき、私はすでにそれを書きました、そして私は他の人のためにそれをここに保管します。

  • インストール PostgreSQL 8.2 。はい、それは8.2.xでなければなりません。 PostgreSQLの生データファイルは同じメジャーリリース内でのみ互換性があるため、他のバージョンはこの目的で機能しません。このような古いバージョンであるため、すでにインストールされている現在のバージョンと共存できない可能性があります。そのため、スペアマシンまたは仮想マシンを使用する必要がある場合があります。

  • 8.2をインストールし、インストーラーによって作成された空のデータベースで動作していることがわかったら、サービスコントロールパネルからシャットダウンします([スタート]-> [実行]-> [services.msc])。

  • データディレクトリの名前をdata-emptyのような名前に変更します。 8.2の場合はC:\Program Files\PostgreSQL\8.2\dataだと思いますが、はっきりとは覚えていません。

  • 古いdatadirを、インストーラーが作成したdatadirを移動した場所に解凍します。これにより、名前と場所が同じになります。管理者以外のアカウントまたはUAC管理者アカウントを実行している場合は、実際には別の場所で解凍してから、別の場所に移動する必要があります。

  • 解凍されたデータディレクトリのプロパティを取得します。 「セキュリティ」タブで、「postgres」ユーザーに完全な制御権を与え、それを内部のすべてのファイルとフォルダに適用します。これは重要;データベースは正しい権限がないと機能せず、解凍したコピーには正しい権限がありません。

  • Services.mscからPostgreSQLサービスを開始します

  • サービスが正しく開始されていることを確認してください。表示されない場合は、イベントビューアで理由を確認してください。また、datadirのpg_logディレクトリのログをチェックし、すべてが適切に見えることを確認します。エラーはありません。

  • psqlに接続して、データにアクセスできるかどうかを確認してください。可能であれば、上記のアドバイスに従ってダンプを作成してください。古いバージョンのデータベースを使い続けないでください。

7
Craig Ringer

Postgres.appツールを使用してこれを行うのは信じられないほど簡単でした。

環境設定に移動し、データディレクトリを変更して、サーバーを再起動しました。それだけでした。びっくりしました。私の場合、バージョンは同じだったと思います。

0
boulder_ruby

クレイグリンガーは私のために働いた。

しかし、私のようなWindows 10にPostgresql 8.2をインストールするのが困難な方のために、Windows XP仮想ボックスを作成することをお勧めします。

0