ablog

不器用で落着きのない技術者のメモ

PostgreSQL で pg_dump / pg_restore

$ pg_dump -h aurora-postgres117.cluster-******.ap-northeast-1.rds.amazonaws.com -U awsuser -b -Fc mydb > mydb.custom
  • pg_resote でインポート
$ pg_restore -h aurora-postgresql117-dc.cluster-******.ap-northeast-1.rds.amazonaws.com -U awsuser -Cc mydb.custom
$ psql "host=aurora-postgres-117-2.cluster-******.ap-northeast-1.rds.amazonaws.com dbname=mydb port=5432 user=awsuser"
Password for user awsuser:
psql (11.9, server 11.7)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

mydb=>  select name,setting,context from pg_settings where name like 'lc%';
    name     |   setting   |  context
-------------+-------------+-----------
 lc_collate  | en_US.UTF-8 | internal
 lc_ctype    | en_US.UTF-8 | internal
 lc_messages |             | superuser
 lc_monetary | C           | user
 lc_numeric  | C           | user
 lc_time     | C           | user
(6 rows)

mydb=>  SELECT character_set_name FROM information_schema.character_sets;
 character_set_name
--------------------
 UTF8
(1 row)

補足

$ pg_dump --version
pg_dump (PostgreSQL) 11.9
  • pg_dump の help
    • デフォルトではダンプはデータベースの符号化方式で作成される。
$ pg_dump --help
pg_dumpはデータベースをテキストファイルまたはその他の書式でダンプします。

使用方法:
  pg_dump [OPTION]... [DBNAME]

一般的なオプション;
  -f, --file=FILENAME          出力ファイルまたはディレクトリの名前
  -F, --format=c|d|t|p         出力ファイルの書式(custom, directory, tar,
                               plain text(デフォルト))
  -j, --jobs=NUM               ダンプ時に指定した数の並列ジョブを使用
  -v, --verbose                冗長モード
  -V, --version                バージョン情報を表示し、終了します
  -Z, --compress=0-9           圧縮形式における圧縮レベル
  --lock-wait-timeout=TIMEOUT  テーブルロックをTIMEOUTだけ待ったあとに失敗
  --nosync                     変更のディスクへの安全な書き出しを待機しません
  -?, --help                   このヘルプを表示し、終了します

出力内容を制御するオプション:
  -a, --data-only              データのみをダンプし、スキーマをダンプしません
  -b, --blobs                  ラージオブジェクトと共にダンプします
  -B, --no-blobs               ラージオブジェクトをダンプしません
  -c, --clean                  再作成前にデータベースオブジェクトを整理(削除)
  -C, --create                 ダンプにデータベース生成用コマンドを含めます
  -E, --encoding=ENCODING      指定の符号化方式でデータをダンプ
  -n, --schema=SCHEMA          指名したスキーマ(複数可)のみをダンプ
  -N, --exclude-schema=SCHEMA  指名されたスキーマ(複数可)をダンプしません
  -o, --oids                   ダンプにOIDを含めます
  -O, --no-owner               プレインテキスト形式で、オブジェクト所有権の
                               復元を飛ばします
  -s, --schema-only            スキーマのみをダンプし、データはダンプしません
  -S, --superuser=NAME         プレインテキスト形式で使用するスーパーユーザ名
  -t, --table=TABLE            指定したテーブル(複数可)のみをダンプ
  -T, --exclude-table=TABLE    指定したテーブル(複数可)をダンプしません
  -x, --no-privileges          権限(grant/revoke)をダンプしません
  --binary-upgrade             アップグレードユーティリティでのみ使用します
  --column-inserts             列名指定のINSERTコマンドとしてデータをダンプ
  --disable-dollar-quoting     ドル記号による引用を無効にして、SQL標準の引用を
                               使います
  --disable-triggers           データのみのリストアをする際、トリガを無効にし
                               ます
  --enable-row-security        行セキュリティを有効にします (ユーザがアクセス
                               許可を持つ内容のみダンプします)
  --exclude-table-data=TABLE   指定したテーブル(複数可)のデータをダンプしません
  --if-exists                  オブジェクトの削除の際に IF EXISTS を使います
  --inserts                    COPYではなくINSERTコマンドとしてデータをダンプ
                               します
  --load-via-partition-root    パーティションをルートテーブル経由でロードします
  --no-comments                コメントをダンプしません
  --no-publications            パブリケーションをダンプしません
  --no-security-labels         セキュリティラベルの割り当てをダンプしません
  --no-subscriptions           サブスクリプションをダンプしません
  --no-synchronized-snapshots  並列ジョブにおいて同期化スナップショットを使用し
                               ません
  --no-tablespaces             テーブルスペースの割り当てをダンプしません
  --no-unlogged-table-data     UNLOGGEDテーブルのデータをダンプしません
  --quote-all-identifiers      キーワードかどうかにかかわらずすべての識別子を
                               引用符で囲います
  --section=SECTION            指定したセクション(pre-data, data, post-data)を
                               ダンプします
  --serializable-deferrable    異常なくダンプを実行できるまで待機します
  --snapshot=SNAPSHOT          指定したスナップショットを使ってダンプを行います
  --strict-names               テーブルやスキーマの追加指定パターンが最低1つの
                               実体にマッチすることを必須とします
  --use-set-session-authorization
                               所有権の設定の際に、ALTER OWNER コマンドではなく
                               SET SESSION AUTHORIZATION コマンドを使用します

接続オプション:
  -d, --dbname=DBNAME      ダンプするデータベース
  -h, --host=HOSTNAME      データベースサーバのホストまたはソケットディレクトリ
  -p, --port=PORT          データベースサーバのポート番号
  -U, --username=NAME      指定のデータベースユーザで接続
  -w, --no-password        パスワード入力を要求しません
  -W, --password           パスワードプロンプトを強制 (自動的に行われます)
  --role=ROLENAME          ダンプの前に SET ROLE を行います

データベース名が指定されなかった場合、環境変数PGDATABASEが使用されます

不具合は<[email protected]>まで報告してください。
  • pg_restore の help
$ pg_restore --help
pg_restoreはpg_dumpで作成したアーカイブからPostgreSQLデータベースをリストアします。

使用方法:
  pg_restore [OPTION]... [FILE]

一般的なオプション;
  -d, --dbname=NAME        接続するデータベース名
  -f, --file=FILENAME      output file name (- for stdout)
  -F, --format=c|d|t       バックアップファイルの書式
                           (自動的に設定されるはずです)
  -l, --list               アーカイブのTOCの要約を表示
  -v, --verbose            冗長モード
  -V, --version            バージョン情報を表示し、終了します
  -?, --help               このヘルプを表示し、終了します

リストア制御のオプション:
  -a, --data-only              データのみをリストア。スキーマをリストアしません
  -c, --clean                  再作成前にデータベースオブジェクトを整理(削除)
  -C, --create                 対象のデータベースを作成
  -e, --exit-on-error          エラー時に終了。デフォルトは継続
  -I, --index=NAME             指名したインデックスをリストア
  -j, --jobs=NUM               リストア時に指定した数の並列ジョブを使用
  -L, --use-list=FILENAME      このファイルの内容に従ってSELECTや出力のソートを
                               行います
  -n, --schema=NAME            指定したスキーマのオブジェクトのみをリストア
  -n, --schema=NAME            指定したスキーマのオブジェクトのみをリストア
  -O, --no-owner               オブジェクトの所有権の復元を省略
  -P, --function=NAME(args)    指名された関数をリストア
  -s, --schema-only            スキーマのみをリストア。データをリストアしません
  -S, --superuser=NAME         トリガを無効にする際に使用するスーパーユーザの名前
  -t, --table=NAME             指名したリレーション(テーブル、ビューなど)をリス
                               トア
  -T, --trigger=NAME           指定したトリガをリストア
  -x, --no-privileges          アクセス権限(grant/revoke)の復元を省略
  -1, --single-transaction     単一のトランザクションとしてリストア
  --disable-triggers           データのみのリストアをする際、トリガを無効にし
                               ます
  --enable-row-security        行セキュリティを有効にします
  --if-exists                  オブジェクトの削除の際に IF EXISTS を使います
  --no-comments                コメントをリストアしません
  --no-data-for-failed-tables  作成できなかったテーブルのデータはリストア
                               しません
  --no-publications            パブリケーションをリストアしません
  --no-security-labels         セキュリティラベルをリストアしません
  --no-subscriptions           サブスクリプションをリストアしません
  --no-tablespaces             テーブル空間の割り当てをリストアしません
  --section=SECTION            指定したセクション (pre-data, data, post-data)
                               をリストア
  --strict-names               テーブルやスキーマの追加指定パターンが最低1つの
                               実体にマッチすることを必須とします
  --use-set-session-authorization
                               所有権の設定の際に、ALTER OWNER コマンドではなく
                               SET SESSION AUTHORIZATION コマンドを使用します

接続オプション:
  -h, --host=HOSTNAME      データベースサーバのホストまたはソケットディレクトリ
  -p, --port=PORT          データベースサーバのポート番号
  -U, --username=NAME      指定のデータベースユーザで接続
  -w, --no-password        パスワード入力を要求しません
  -W, --password           パスワードプロンプトを強制 (自動的に行われます)
  --role=ROLENAME          リストアに先立って SET ROLE します

The options -I, -n, -N, -P, -t, -T, and --section can be combined and specified
multiple times to select multiple objects.

入力ファイル名が指定されない場合、標準入力が使用されます。

不具合は<[email protected]>まで報告してください。