pg_dump は、PolarDB for PostgreSQL (Compatible with Oracle) が提供する論理バックアップツールです。 これを使用して、クラスター内の単一のデータベースをスクリプトファイルまたは他のアーカイブファイルとしてバックアップできます。
概要
pg_dump は、単一のデータベースをバックアップするために使用します。 データベースへのアクセス中でも整合性のあるバックアップを作成し、他のユーザーによるアクセス (読み取りまたは書き込み) をブロックしません。 詳細については、「pg_dump の公式サイト」をご参照ください。
PolarTools の pg_dump ツールはコミュニティ版とは異なります。 PolarTools バージョンは PolarDB for PostgreSQL (Compatible with Oracle) に対応しています。 コミュニティ版の pg_dump を使用すると、不明なエラーが発生したり、データバックアップが不完全になったりする可能性があります。
バックアップファイルのフォーマット
スクリプトファイル:スクリプトファイルは、バックアップ時の状態にデータベースを復元するための SQL コマンドを含むプレーンテキストファイルです。
アーカイブファイル:アーカイブファイルは pg_restore で復元する必要があります。
出力ファイルのフォーマットには、カスタムフォーマット -Fc、ディレクトリフォーマット -Fd、および tar フォーマットのアーカイブファイル -Ft があります。 -Fc および -Fd フォーマットでは、アーカイブされたすべての項目を選択して並べ替えることができ、デフォルトで圧縮されます。 -Ft フォーマットは圧縮ファイルではなく、データ復元時の並べ替えをサポートしていません。
説明ディレクトリフォーマットは、並列バックアップをサポートする唯一のフォーマットです。
アーカイブフォーマットのいずれかを使用すると、pg_dump はデータベース全体をバックアップできます。 pg_restore を使用してアーカイブを検査したり、復元するデータベースの部分を選択したりできます。
構文
pg_dump [connection-option...] [option...] [dbname]表 1. パラメーター
パラメーター | 説明 |
connection-option | データベース接続パラメーターを制御するコマンドラインオプション。 詳細については、「接続オプション」をご参照ください。 |
option | 出力内容とフォーマットを制御するコマンドラインオプション。 詳細については、「ダンプオプション」をご参照ください。 |
dbname | バックアップするデータベースの名前。 |
表 2. 接続オプション
コマンドラインオプション | 説明 |
-d dbname または --dbname=dbname | 接続するデータベースの名前を指定します。 |
-h host または --host=host | サーバーが実行されているマシンのホスト名を指定します。 この値がスラッシュで始まる場合、UNIX ドメインソケットのディレクトリとして使用されます。 デフォルト値は PGHOST 環境変数です。 |
-p port または --port=port | サーバーが接続をリッスンする TCP ポート、またはローカル UNIX ドメインソケットのファイル拡張子を指定します。デフォルト値は PGPORT 環境変数から取得され、この変数が設定されていない場合はコンパイル時に組み込まれたデフォルトが使用されます。 |
-U username または --username=username | 接続に使用するユーザー名。 |
-w は --no-password のエイリアスです | パスワードのプロンプトを一切表示しません。 |
-W は --password の短縮形です。 | pg_dump がデータベースに接続する前にパスワードの入力を強制的に要求します。 説明 このオプションは任意です。 |
--role=rolename | バックアップの作成に使用するロール名を指定します。 |
表 3. ダンプオプション
コマンドラインオプション | 説明 |
dbname | バックアップするデータベースの名前。 指定しない場合は、PGDATABASE 環境変数が使用されます。 |
-a は --data-only のエイリアスです | スキーマ (データ定義) ではなく、データのみをバックアップします。 説明 このオプションは、テーブルデータ、BLOB、およびシーケンス値をバックアップします。 |
-b は --blobs のエイリアスです | BLOB はデフォルトでバックアップに含まれます。 --schema、--table、または --schema-only オプションが指定されている場合、BLOB はバックアップに含まれません。 重要 BLOB はデータと見なされるため、--data-only オプションを使用するとバックアップに含まれますが、--schema-only オプションを使用すると除外されます。 |
-B は --no-blobs のエイリアスです | バックアップからBLOBを除外します。 説明 -b と -B の両方が指定された場合、バックアップには BLOB が含まれます。 |
-c は --clean のエイリアスです | データベースオブジェクトを作成するコマンドを実行する前に、そのオブジェクトを削除します。 データベースを復元するときのエラーメッセージを回避するために、--if-exists を指定することを推奨します。 説明 このオプションはスクリプトファイルにのみ適用されます。 アーカイブファイルの場合、pg_restore を呼び出すときにこのオプションを指定できます。 |
-C または --create | データベースを作成し、新しく作成されたデータベースに再接続します。 --clean が指定されている場合、スクリプトはターゲットデータベースを削除して再作成し、そのデータベースに再接続します。 --create オプションが指定され、--no-acl オプションが指定されていない場合、バックアップデータにはデータベースのコメント、設定情報、およびアクセス権限が含まれます。 説明 このオプションはスクリプトファイルにのみ適用されます。 アーカイブファイルの場合、pg_restore を呼び出すときにこのオプションを指定できます。 |
-E encoding または --encoding=encoding | 指定された文字エンコーディングを使用してバックアップを作成します。 デフォルトでは、バックアップはバックアップ対象のデータベースの文字エンコーディングを使用して作成されます。 PGCLIENTENCODING 環境変数の値を目的のバックアップエンコーディングに設定することもできます。 |
-F format または --format=format | 出力のフォーマットを指定します。 フォーマットは次のいずれかです。
|
-f file または --file=file | 指定されたファイルに出力を送信します。
|
-j njobs または --jobs=njobs | このオプションは、 説明 並列バックアップを開始する前に、DDL や DML など、データベースを変更するプロセスを停止してください。 |
-n pattern は --schema=pattern の短縮形です。 | pattern に一致するスキーマのみをバックアップします。 このオプションが指定されていない場合、ターゲットデータベース内のすべての非システムスキーマがバックアップされます。 説明
|
-N pattern は --exclude-schema=pattern のエイリアスです | pattern 以外のスキーマをバックアップします。 説明
|
-o または --oids | すべてのテーブルのデータの一部としてオブジェクト識別子 (OID) をバックアップします。 アプリケーションが OID 列を参照する場合 (たとえば、外部キー制約内など) は、このオプションを使用します。 それ以外の場合は、このオプションを使用しないでください。 |
-O は --no-owner の短縮形です | 元のデータベースと一致するようにオブジェクトの所有権を設定するコマンドは含まれません。 説明 このオプションはスクリプトファイルにのみ適用されます。 アーカイブファイルの場合、pg_restore を呼び出すときにこのオプションを指定できます。 |
-s は --schema-only の短縮形です | データではなく、オブジェクト定義 (スキーマ) のみをバックアップします。 |
-S username は --superuser=username と同じです | トリガーを無効にするときに使用されるスーパーユーザーのユーザー名。 このオプションは --disable-triggers と併用する場合にのみ有効です。 |
-t pattern、または --table=pattern | pattern に一致するテーブルのみをバックアップします。 -t オプションを複数回指定するか、パターンにワイルドカードを使用することで、複数のテーブルを選択できます。 説明 -t を指定すると、pg_dump は選択したテーブルが依存する可能性のある他のデータベースオブジェクトをバックアップしようとしません。 したがって、特定のテーブルのバックアップが空のデータベースに正常に復元できるとは限りません。 |
-T pattern は --exclude-table=pattern のエイリアスです | pattern に一致するテーブルをバックアップしません。 -T オプションを複数回指定して、複数のパターンに一致するテーブルを除外できます。 説明
|
-v または --verbose | 冗長モードを指定します。 |
-V は --version のエイリアスです | pg_dump のバージョンを表示して終了します。 |
-x は --no-privileges または --no-acl のエイリアスです | アクセス権限 (grant/revoke コマンド) のバックアップは含めません。 |
-Z 0..9 は --compress=0..9 と同じです | 使用する圧縮レベルを指定します。 値 0 は圧縮なしを意味します。 説明
|
--column-inserts および --attribute-inserts | 明示的な列名を持つ |
--disable-dollar-quoting | 関数本体でのドル引用符の使用を無効にします。 |
--disable-triggers | ターゲットテーブルのトリガーを一時的に無効にします。 このオプションは、データバックアップを作成する場合にのみ有効です。 このオプションを使用する場合は、-S を使用してスーパーユーザーを指定する必要があります。 説明 このオプションはスクリプトファイルにのみ適用されます。 アーカイブファイルの場合、pg_restore を呼び出すときにこのオプションを指定できます。 |
--enable-row-security | アクセス権限のあるテーブルの行のみをバックアップします。 このオプションは、行単位セキュリティーが有効になっているテーブルのデータをバックアップする場合にのみ有効です。 重要 このオプションを使用する場合、データ復元時に COPY FROM が行単位セキュリティーをサポートしていないため、INSERT を使用してバックアップを作成する必要がある場合もあります。 |
--exclude-table-data=pattern | pattern に一致するテーブルのデータをバックアップしません。 --exclude-table-data を複数回指定して、複数のパターンに一致するテーブルを除外できます。 説明 データベース内のすべてのテーブルからデータを除外するには、--schema-only をご参照ください。 |
--if-exists | IF EXISTS 句を追加するなど、条件付きコマンドを使用してデータベースオブジェクトをクリーンアップします。 --clean オプションも指定する必要があります。そうしないと、このオプションは効果がありません。 |
--inserts | データを INSERT コマンドとしてバックアップします。 重要 このオプションを使用すると、復元中にデータを並べ替えると操作が失敗する可能性があります。 --column-inserts を使用することを推奨します。 |
--load-via-partition-root | COPY または INSERT コマンドを使用して、テーブルパーティションからデータをバックアップします。 説明 このオプションで作成されたアーカイブファイルを復元する際は、並列復元を慎重に使用してください。 |
--lock-wait-timeout=timeout | 共有ロックを取得するための待機時間を指定します。 |
--no-comments | コメントをバックアップしません。 |
--no-publications | パブリケーションをバックアップしません。 |
--no-security-labels | セキュリティラベルをバックアップしません。 |
--no-subscriptions | サブスクリプションをバックアップしません。 |
--no-sync | すべてのファイルをディスクに安全に書き込むのを待たずに処理を返します。 |
--no-synchronized-snapshots | サーバー上で pg_dump -j を実行できることを示します。 |
--no-tablespaces | デフォルトのテーブル空間にすべてのオブジェクトを作成します。 説明 このオプションはスクリプトファイルにのみ適用されます。 アーカイブファイルの場合、pg_restore を呼び出すときにこのオプションを指定できます。 |
--no-unlogged-table-data | ログに記録されないテーブルのデータをバックアップしません。 |
--quote-all-identifiers | すべての識別子を強制的にクォートします。 |
--rows-per-insert=nrows | データベースバックアップ内の INSERT ステートメントあたりの最大行数を制御します。 |
--section=sectionname | 指定されたセクションのみがバックアップされるように指定します。 セクションの名前は pre-data、data、または post-data です。 このオプションを複数回指定して、複数のセクションを選択できます。 デフォルトでは、すべてのセクションがバックアップされます。 説明
|
--serializable-deferrable | バックアップにシリアライザブルトランザクションを使用します。 説明
|
--snapshot=snapshotname | データベースをバックアップする際に、指定された同期スナップショットを使用します。 |
--strict-names | 各スキーマ (-n または --schema) およびテーブル (-t または --table) パターンが、ソースデータベース内の少なくとも 1 つのスキーマまたはテーブルに一致する必要があります。 説明
|
--use-set-session-authorization | ALTER OWNER コマンドの代わりに、SQL 標準の SET SESSION AUTHORIZATION コマンドを出力します。 |
-? または --help | pg_dump のコマンドライン引数に関するヘルプを表示して終了します。 |
注意事項
データバックアップのみに使用されるテーブルを選択し、--disable-triggers オプションを使用すると、
pg_dumpはデータを挿入する前にユーザーテーブルのトリガーを無効にするコマンドを発行し、データが挿入された後にトリガーを再度有効にするコマンドを発行します。 復元が中断された場合、システムカタログが不正な状態のままになる可能性があります。バックアップファイルを復元した後、ANALYZE を実行してパフォーマンスを最適化することを推奨します。
論理レプリケーションサブスクリプションをバックアップすると、pg_dump は connect=false オプション付きの CREATE SUBSCRIPTION コマンドを生成します。 ホストが変更された場合は、接続情報を変更する必要がある場合があり、新しい完全なテーブルコピーを開始する前にターゲットテーブルを切り捨てる必要があります。
pg_dump は内部的に SELECT ステートメントを実行するため、pg_dump の実行に問題がある場合は、psql などのツールを使用してデータベースから情報をクエリできるか確認してください。 さらに、libpq フロントエンドライブラリが使用するデフォルトの接続設定と環境変数が正しく機能していることを確認してください。
通常、統計コレクターは pg_dump のデータベースアクティビティを収集しますが、これが必要ない場合は、PGOPTIONS または ALTER USER コマンドを使用して track_counts パラメーターを false に設定できます。
例
次のコマンドを実行して、
mydbという名前のデータベースを SQL スクリプトファイルにバックアップします。pg_dump mydb > db.sql次のコマンドを実行して、SQL スクリプトを
newdbという名前の新しく作成されたデータベースにロードします。psql -d newdb -f db.sql次のコマンドを実行して、データベースをカスタムフォーマットのアーカイブファイルにバックアップします。
pg_dump -Fc mydb > db.dump次のコマンドを実行して、データベースをディレクトリフォーマットのアーカイブファイルにバックアップします。
pg_dump -Fd mydb -f dumpdir次のコマンドを実行して、5 つのワーカージョブでデータベースを並列バックアップし、ディレクトリフォーマットのアーカイブファイルに保存します。
pg_dump -Fd mydb -j 5 -f dumpdir次のコマンドを実行して、アーカイブファイルを
newdbという名前の新しいデータベースに復元します。pg_restore -d newdb db.dump次のコマンドを実行して、アーカイブファイルをバックアップ元のデータベースに復元し、そのデータベースの現在の内容を消去します。
pg_restore -d postgres --clean --create db.dump次のコマンドを実行して、
mytabという名前の単一のテーブルをバックアップします。pg_dump -t mytab mydb > db.sql次のコマンドを実行して、
detroitスキーマ内の名前が emp で始まるすべてのテーブルをバックアップします。ただし、employee_logという名前のテーブルは除きます。pg_dump -t 'detroit.emp*' -T detroit.employee_log mydb > db.sql次のコマンドを実行して、名前が east または west で始まり、gsm で終わるすべてのスキーマをバックアップします (名前に test を含むスキーマは除きます)。
pg_dump -n 'east*gsm' -n 'west*gsm' -N '*test*' mydb > db.sql次のコマンドは、正規表現を使用して同じ結果をより簡潔に実現します。
pg_dump -n '(east|west)*gsm' -N '*test*' mydb > db.sql次のコマンドを実行して、名前が ts_ で始まるテーブルを除くすべてのデータベースオブジェクトをバックアップします。
pg_dump -T 'ts_*' mydb > db.sql-t および関連するスイッチで大文字または大文字と小文字が混在する名前を指定する必要がある場合は、名前を二重引用符で囲む必要があります。 そうしないと、名前は小文字に変換されます。 ただし、二重引用符はシェルコマンドの特殊文字であるため、エスケープする必要もあります。 したがって、大文字と小文字が混在する名前の単一のテーブルをダンプするには、次のコマンドを実行します。
pg_dump -t "\"MixedCaseName\"" mydb > mytab.sql