0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PostgreSQLのダンプ(pg_dump)、リストア(pg_restore)をAWS S3でやってみた

Posted at

PostgreSQLのダンプツール(pg_dump)、リストアツール(pg_restore)を使おうと思ったら
データがでかいと、ローカルPCにダンプファイル作れない!!と困った。
それなら、AWS-S3にダンプファイル作ればよくないか?と思ったら出来たので、やり方を書きます。

前提

AWS CLIを使うことが前提です。

ダンプ pg_dump

pg_dump -h ホスト -d データベース名 -U ユーザー -a -v -Fc  | aws s3 cp - s3://BUCKET名/ダンプファイル名

データがかなりでっかい(ファイルサイズが50G超えると)と

An error occurred (InvalidArgument) when calling the UploadPart operation: Part number must be an integer between 1 and 10000, inclusive

と、エラーになります!!

このエラーが発生したときは --expected-size オプションを指定します。
S3のcliはマルチパートアップロードっていう方法でアップロードします。
速くアップロードするためにファルを分割してパラレルアップロードするようなイメージです。
しかし、分割数は最大で10000までと決まっています。
なので、事前にアップロードするファイルサイズを--expected-sizeで指定しておくと、分割数を10000個以内になるように、うまいぐあいに分割してくれます。
なので、100Gのファイルをアップロードする場合は
100 * 1024 * 1024 * 1024 = 107,374,182,400を指定すればOKです。

--expected-size

pg_dump -h ホスト -d データベース名 -U ユーザー -a -v -Fc  | aws s3 cp - s3://BUCKET名/ダンプファイル名 --expected-size 107374182400

リストア pg_restore

aws s3 cp s3://BUCKET名/ダンプファイル名 - | pg_restore -h ホスト -d データベース名 -U ユーザー -a -Fc -v

ダンプファイルの一部のテーブルだけrestoreしたい場合

aws s3 cp s3://BUCKET名/ダンプファイル名 - | pg_restore -h ホスト -d データベース名 -U ユーザー -a -Fc -v -t リストアしたいテーブル名

と-tでテーブル指定しますが、この場合

[Errno 32] Broken pipe

とエラーが発生します。
ですが、これは無視してもOKです。

エラーになる理由は
-t指定して一部のテーブルだけをリストアする場合、そのテーブルのリストアが完了するとpg_restoreコマンドは終了します。
ですが、まだダンプファイルには続きがある場合、s3のcliコマンドはファイルのダウンロードを続けます。
この時、続けようとしたが「|」先のpg_resotreコマンドが終わっているので「|」がおかしい。となっただけので、リストア自体には問題ありません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?