コマンドラインを使用してpostgresバックアップファイルを復元しますか?


294

私はpostgresqlが初めてで、ローカルではpgadmin3を使用しています。しかし、リモートサーバーでは、そのような贅沢はありません。

データベースのバックアップを作成してコピーしましたが、コマンドラインからバックアップを復元する方法はありますか?私はGUIまたはpg_dumpsに関連するものしか表示しないので、誰かがこれに対処する方法を教えてくれれば、それはすばらしいことです。

回答:


365

ダンプファイルの作成方法に応じて、調べるツールが2つあります。

最初の参照ソースはpg_dump(1)、それ自体がダンプ自体を作成するものであるため、manページである必要があります。それは言う:

ダンプは、スクリプトまたはアーカイブファイル形式で出力できます。スクリプトダンプは、データベースを保存時の状態に再構築するために必要なSQLコマンドを含むプレーンテキストファイルです。そのようなスクリプトから復元するには、それをpsql(1)にフィードします。スクリプトファイルは、他のマシンや他のアーキテクチャ上でもデータベースを再構築するために使用できます。他のSQLデータベース製品でもいくつかの変更が加えられています。

データベースを再構築するには、pg_restore(1)で代替アーカイブファイル形式を使用する必要があります。pg_restoreは、復元するものを選択したり、復元する前にアイテムを並べ替えたりすることができます。アーカイブファイル形式は、アーキテクチャ間で移植できるように設計されています。

だから、それが捨てられた方法に依存します。あなたはおそらく優れたfile(1)コマンドを使用してそれを理解することができます-それがASCIIテキストおよび/またはSQLについて言及している場合は、それを復元する必要がありpsqlますpg_restore

復元はとても簡単です:

psql -U username -d dbname < filename.sql

-- For Postgres versions 9.0 or earlier
psql -U username -d dbname -1 -f filename.sql

または

pg_restore -U username -d dbname -1 filename.dump

それぞれのマンページを確認してください-復元の動作に影響を与えるオプションはかなりあります。ダンプの生成方法によっては、復元する前に「コメント」で指摘されているように、「ライブ」データベースを一掃するか、template0から再作成する必要がある場合があります。


3
IMEは、事実上常に、template0から新しく作成されたデータベースに復元することを望んでいます。それ以外の場合、template1でplpgsqlをアクティブ化するなどの操作を行った場合、復元プロセスは再度それを試みます。提案する-1スイッチは、トランザクション全体が失敗することを意味します。つまり、「createdb -T template0 seo2」の後に「pg_restore -v -d seo2 seo.pg」を続けて、seo.pg(seoデータベースから作成)を新しいseo2データベースに復元します。バックアップファイルが.sqlファイルのみの場合は、手動でファイルの競合する部分を削除できます。
araqnid 2010

61
あなたは持つことができない-d-f同時に。pg_restore: options -d/--dbname and -f/--file cannot be used together
CppLearner 2013

8
バージョン9.2では、「-f」オプションはダンプファイルではなく出力ファイルを指定します(これはおそらく以前のバージョンでも同じことを意味します)。
David Resnick

4
cannot be used togetherこちらを参照してください。stackoverflow.com/questions/27882070/...
Abdull

3
@ Alex78191は、単一のトランザクションとして実行されることを意味し、完全に失敗してロールバックするか、通過する可能性があります。データベースへのアクセスもブロックされます。
ATN 2018

216

バックアップを作成する

pg_dump -h localhost -p 5432 -U postgres -F c -b -v -f 
"/usr/local/backup/10.70.0.61.backup" old_db

-F cはカスタム形式(圧縮され、-j Nと並行して実行可能)-bはblobを含み、-vは冗長、-fはバックアップファイル名

バックアップから復元

pg_restore -h localhost -p 5432 -U postgres -d old_db -v 
"/usr/local/backup/10.70.0.61.backup"

-h localhost-オプションを設定することが重要


2
これらのコマンドを実行する前に、Posgresql binフォルダーに配置する必要があることを述べておきます。たとえば、Windowsでは(デフォルトのフォルダーにインストールした場合)C:\ Program Files \ PostgreSQL \ 9.6 \ bin
juan_carlos_yl

90

postgresデータベースに対する完全な権限を取得するには、としてログインする必要がある場合があります。

su - postgres
psql -l                      # will list all databases on Postgres cluster

pg_dump / pg_restore

  pg_dump -U username -f backup.dump database_name -Fc 

スイッチ-Fはバックアップファイルのフォーマットを指定します:

  • c 圧縮され、最小のバックアップファイルサイズになるカスタムPostgreSQL形式を使用します
  • d 各ファイルが1つのテーブルであるディレクトリの場合
  • t TARアーカイブ用(カスタム形式より大きい)
  • -h/ --hostサーバーが実行されているマシンのホスト名を指定します
  • -W/ --passwordフォースpg_dumpデータベースに接続する前にパスワードのプロンプトへ

バックアップを復元:

   pg_restore -d database_name -U username -C backup.dump

パラメータ-Cは、データをインポートする前にデータベースを作成する必要があります。それが機能しない場合は、常にデータベースを作成できます。コマンドを使用(postgresデータベースを作成する権限を持つユーザーまたは他のアカウントとして)createdb db_name -O owner

pg_dump / psql

引数を指定しなかった場合は、-FデフォルトのプレーンテキストSQL形式が使用されました(またはとともに使用されました-F p)。その後、使用できませんpg_restore。でデータをインポートできますpsql

バックアップ:

pg_dump -U username -f backup.sql database_name

戻す:

psql -d database_name -f backup.sql

「psql -d database_name -f backup.sql」コマンドを使用して、DigtoOceanのdokkuからダンプしたデータベースを復元しました。よく働きました。
NineBlindEyes 2014年

1
ユーザー(などpostgres)にパスワードが設定されている場合にpsqlを使用しているときに、-Wオプションを使用する必要があります。たとえば、Ubuntuでsu postgresターミナルから何もせず$ psql -h localhost -U postgres -W -d DB_NAME < DB_BACKUP.sqlに、ローカルホストにバックアップを復元するために私が働いたコマンドです。-hオプションが必要であることに注意してください。
Jignesh Gohel

@JiggneshhGohelマニュアルが言うように:-Wオプションは絶対に必須ではありません。pg_dumpサーバーがパスワード認証を要求すると、自動的にパスワードの入力を求められます。またPGPASSWORD、プレーンテキストのパスワードを使用している場合は、env変数を使用できます。-hデフォルトPGHOSTが適用されない場合に必要です。これらのオプションは多くのPostgreSQLユーティリティに共通なので、この質問に答える必要はありません(設定に大きく依存します)。
トムバート

@Tombartの2番目のオプションpg_dump/psql部分は私にとっては仕事です。しかし、最初の部分pg_dump/pg_restoreは、私にとって復元のために機能しません。ありがとうございました。
Anjan Biswas

@AnjanBiswas最初のオプションは、圧縮アーカイブを使用することです。これは、より多くのCPUを必要としますが、バックアップファイルはディスク上のより少ないスペースしか占有しません。適切な圧縮を選択する必要があるだけです。例-Fc
トンバート

60

POSTGRESQL 9.1.12

投げ捨てる:

pg_dump -U user db_name > archive_name.sql

ユーザーパスワードを入力してEnterキーを押します。

戻す:

psql -U user db_name < /directory/archive.sql

ユーザーパスワードを入力してEnterキーを押します。


31

以下は、pg_dumpデータベースの復元に使用する私のバージョンです。

pg_restore -h localhost -p 5432 -U postgres -d my_new_database my_old_database.backup

または使用psql

psql -h localhost -U postgres -p 5432 my_new_database < my_old_database.backup

ここで、-hホスト、-pポート、-uログインユーザー-d名、データベースの名前


2
ゴビンド・シン、なぜ私の答えを編集したの?何も新しいものを持っていない変更...
Yahor M

1
my_new_databaseを使用する場合psql、すでに存在している必要がありますか?
Elmex80s

22

GZIPによるバックアップと復元

より大きなサイズのデータ​​ベースの場合、これは非常に良いです

バックアップ

pg_dump -U user -d mydb | gzip > mydb.pgsql.gz

戻す

gunzip -c mydb.pgsql.gz | psql dbname -U user

https://www.postgresql.org/docs/9.1/static/backup-dump.html


1
ubuntuの場合、次を使用できgunzip -c mydb.pgsql.gz | sudo -u postgres psqlます。データベースを操作する権限を取得する。また--clean、ダンプ時にフラグを考慮してください。これにより、既存のデータがすべて消去され、便利になる場合があります。
セバスチャン

私のために素晴らしい、きちんとした解決策を働いています。ありがとうございました!
Nam G VU


8

これは私のために働きました:

pg_restore --verbose --clean --no-acl --no-owner --host=localhost --dbname=db_name --username=username latest.dump

ありがとう、--no-owner本当に助けてくれました。
bonafernando

7

1.ターミナルを開きます。

2.次のコマンドでデータベースをバックアップします

postgres bin-/opt/PostgreSQL/9.1/bin/

ソースデータベースサーバー-192.168.1.111

バックアップファイルの場所と名前-/home/dinesh/db/mydb.backup

ソースデータベース名-mydatabase

/opt/PostgreSQL/9.1/bin/pg_dump --host '192.168.1.111' --port 5432 --username "postgres" --no-password --format custom --blobs --file "/ home / dinesh / db /mydb.backup "" mydatabase "

3. mydb.backupファイルを宛先に復元します。

宛先サーバー-localhost

宛先データベース名-mydatabase

バックアップを復元するためのデータベースを作成します。

/opt/PostgreSQL/9.1/bin/psql -h 'localhost' -p 5432 -U postgres -c "CREATE DATABASE mydatabase"

バックアップを復元します。

/opt/PostgreSQL/9.1/bin/pg_restore --host 'localhost' --port 5432 --username "postgres" --dbname "mydatabase" --no-password --clean "/ home / dinesh / db / mydb。バックアップ"


4

pg_dumpを使用してバックアップを作成すると、次の方法で簡単に復元できます。

  1. コマンドラインウィンドウを開く
  2. Postgres binフォルダに移動します。例えば: cd "C:\ProgramFiles\PostgreSQL\9.5\bin"
  3. コマンドを入力してデータベースを復元します。 For example: psql.exe -U postgres -d YourDatabase -f D:\Backup\.sql
  4. postgresユーザーのパスワードを入力します
  5. 復元プロセスを確認する

4

1)psqlターミナルを開きます。

2)ダンプファイルをunzip / untarします。

3)空のデータベースを作成します。

4)次のコマンドを使用して.dumpファイルを復元します

<database_name>-# \i <path_to_.dump_file>




2

postgresバックアップファイルの復元は、最初にどのようにバックアップを作成したかによって異なります。

-F cまたは-F dでpg_dumpを使用した場合は、pg_restoreを使用する必要があります。それ以外の場合は、

psql -h localhost -p 5432 -U postgres <バックアップファイル

postgresデータベースをバックアップおよび復元する9つの方法


データベース名の部分を見逃していて、宛先データベースが存在しないと文句を言うことに気づきましたか?
ペレ


2

ネクロポストは申し訳ありませんが、これらの解決策は私にはうまくいきませんでした。私はpostgres 10を使用しています。Linuxの場合:

  1. ディレクトリをpg_hba.confに変更する必要がありました。
  2. 方法をピアからmd5に変更するには、ファイルを編集する必要がありました ここにました
  3. サービスを再起動します。 service postgresql-10 restart
  4. ディレクトリをbackup.sqlのある場所に変更して実行します。
    psql postgres -d database_name -1 -f backup.sql

    -database_nameは私のデータベースの名前です

    -backup.sqlは、.sqlバックアップファイルの名前です。


1

pg_dumpの実行時に認証の問題が発生したため、ダンプファイルを移動しました

mv database_dump /tmp

一時ディレクトリに入れて実行しました

su -u postgres
cd /tmp
pg_restore database_dump

大きなデータベースダンプがある場合は、現在のユーザーとpostgresユーザーがアクセスしてデータベースダンプファイルをそこに置くことができる別のディレクトリを作成することもできます。


1

バックアップSQLファイルがある場合は、簡単に復元できます。以下に示す指示に従ってください

1. At first, create a database using pgAdmin or whatever you want (for example my_db is our created db name)
2. Now Open command line window
3. Go to Postgres bin folder. For example:  cd "C:\ProgramFiles\PostgreSQL\pg10\bin"
4. Enter the following command to restore your database: psql.exe -U postgres -d my_db -f D:\Backup\backup_file_name.sql 

必要に応じてpostgresユーザーのパスワードを入力し、Postgresにその作業を任せます。次に、復元プロセスを確認できます。


0

データをバックアップしたり、バックアップからデータを復元したりする場合は、次のコマンドを実行できます。

  1. データのバックアップを作成するにC:\programfiles\postgres\10\bin\は、次のようにpostgres \ bin \ディレクトリに移動し、次のコマンドを入力します。

    pg_dump -FC -U ngb -d ngb -p 5432 >C:\BACK_UP\ngb.090718_after_readUpload.backup
  2. バックアップからデータを復元するには、次のようにpostgres \ bin \ディレクトリに移動し、C:\programfiles\postgres\10\bin\以下のコマンドを入力します。

    C:\programFiles\postgres\10\bin> pg_restore -Fc -U ngb -d ngb -p 5432 <C:\ngb.130918.backup

    バックアップファイルが存在することを確認してください。


-3

下の例を見てください

C:/ Program Files / PostgreSQL / 9.4 / bin \ pg_restore.exe --host localhost --port 5432 --username "postgres" --dbname "newDatabase" --no-password --verbose

C:\ Users \ Yogesh \ Downloads \ new Download \ DB.backup

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.