postgresデータベースに単一のテーブルのバックアップを作成する方法は?


160

postgresを使用してデータベース内の単一のテーブルのバックアップを作成する方法はありますか?そしてどうやって?これはpg_dumpコマンドでも機能しますか?

回答:


212

バックアップする--table必要がpg_dumpあるテーブルを指定するために使用します。

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename dbname

9
そして、そのバックアップファイルを復元する方法。(.backup)、私は使用しましたpg_restore --host localhost --port 5432 --username postgres --dbname "anydb" --table public.tablename -Ft --verbose "/path/filename.backup"が、それは出てきました:pg_restore: [tar archiver] corrupt tar header found in --
Anderson Dorregaray Linares

13
psql -U username -d database -1 -f your_dump.sql
rnaud 2017

5
どういう意味ですか:abstract_file_path?
bandungeuy 2018

3
なぜこの回答に賛成票が投じられたのかはわかりません。人々は自分で調べたり試みたりせずに+1をクリックします。この回答の問題は、それがまったく役に立たなくなることです。与えられたソリューション/コマンドは、テーブル(主キー)で作成されたシーケンスをエクスポートしないため、インポートは失敗します。シーケンスで主キーを使用しない単一の本番PGデータベースはどこにもありません。それは半分の答えであり、質問に完全に答えることができず、単一のテーブルをエクスポート/インポートするには追加の作業が必要です。
user10664542

1
これとは少し異なるsudoツイストで、ファイルダンプのアクセス許可エラーが発生し(ユーザーpostgresは自分のディレクトリに書き込みアクセスを持っていないので十分論理的です)、の不明なフラグエラーが発生しました--ignore-version。Prashant Kumarの答えの方が簡単です。
JL Peyret

84

Ubuntuを使用している場合、

  1. postgresユーザーにログインします sudo su postgres
  2. pg_dump -d <database_name> -t <table_name> > file.sql

postgresユーザーが書き込み権限を持つコマンドを実行していることを確認してください(例:/tmp

編集する

.sqlを別のコンピューターにダンプする場合は、.sqlファイルに保存されている所有者情報をスキップすることを検討する必要がある場合があります。

使用できます pg_dump --no-owner -d <database_name> -t <table_name> > file.sql


1
それぞれの名前を指定せずにすべてのテーブルが必要な場合はどうでしょうか。
2015

3
-tオプションを削除するだけです!pg_dump -d <database_name> > file.sql
スリハルシャカパラ2015

4
理由はわかりませんが、psql9.3では-dオプションが無効であり、指定されたコマンドが機能しません。動作しているのはpg_dump -U username db_name -t table_name> fileNameです。
serkan kucukbay 2016年

pg_dump -t <table_name> <database_name> > file.sql
スリラム

@ user10664542:マニュアル、特にこのセクションをお読みください:「この目的のために、「テーブル」にはビュー、マテリアライズドビュー、シーケンス、および外部テーブルが含まれます」。
フランクハイケンズ

42

pg_dump -h localhost -p 5432 -U postgres -d mydb -t my_table> backup.sql

単一のテーブルのバックアップを取ることができますが、データベース全体のバックアップを取り、必要なテーブルを復元することをお勧めします。データベース全体をバックアップすることは常に良いことです。

pg_dumpを使用する9つの方法


なぜこの回答に賛成票が投じられたのかはわかりません。人々は自分で調べたり試みたりせずに+1をクリックします。この回答の問題は、それがまったく役に立たないことです。指定されたソリューション/コマンドは、テーブル(主キー)で作成されたシーケンスをエクスポートしないため、インポートが失敗します。シーケンスで主キーを使用しない単一の本番PGデータベースはどこにもありません。それは半分の答えであり、質問に完全に答えることができず、単一のテーブルをエクスポート/インポートするには追加の作業が必要です。
user10664542

上記のように、私は強い疑念を抱いています。シーケンスは追加の複雑さをもたらしますが、十分な賛成票は同様の答えにあり、人々が事実後にシーケンスを調整しなければならなかったとしても、おそらくそれらを機能させました。ダンプを復元する必要があった場合、シーケンスの最後のIDをmax(id)テーブルのから更新する方法を探しました。これがうまくいった答えであり、生成されたsqlを見ると、復元できたと確信しています。
JL Peyret

9

グラフィカルユーザーインターフェイスが必要な場合は、pgAdmin III(Linux / Windows / OS X)を使用できます。選択するテーブルを右クリックして、「バックアップ」をクリックします。pg_dumpコマンドが作成されます。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

ここに画像の説明を入力してください


2

フランク・ハイケンの回答への追加として、のINSERT代わりにステートメントを使用したいcopy from stdin場合は、--insertsフラグを指定する必要があります

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename --inserts dbname

--ignore-versionフラグが廃止されたため、フラグを省略したことに注意してください。


なぜこの回答に賛成票が投じられたのかはわかりません。人々は自分で調べたり試みたりせずに+1をクリックします。この回答の問題は、それがまったく役に立たないことです。指定されたソリューション/コマンドは、テーブル(主キー)で作成されたシーケンスをエクスポートしないため、インポートが失敗します。シーケンスで主キーを使用しない単一の本番PGデータベースはどこにもありません。それは半分の答えであり、質問に完全に答えることができず、単一のテーブルをエクスポート/インポートするには追加の作業が必要です。
user10664542
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.