私はこれを行うのに非常に苦労しました-私はプロセスを説明するためにStackOverflowでQ / Aを行うと思いました。
問題は、開発用にRDS postgresデータベースをコピーすることです。特に、データベース移行スクリプトのテストなどに使用します。そのため、「単一データベース」内の「単一スキーマ」に焦点を当てています。
私の場合、単一のRDSインスタンス内にとどまりながら、可能な限り分離されたテストデータベースを作成したいと思います(RDSインスタンス全体のスピンアップには5〜15分かかり、安価であるため)。
これは、コマンドラインのみを使用した回答です。
前提条件:
コンテキストの例:
rds.example.com
という名前のマスターユーザーがいるRDSインスタンスがありますrds_master
。db_dev_user
という名前のデータベースであるという名前の「アプリケーションユーザー」dev_db
がいますapp_schema
。pg_dumpは元のデータベースのスキーマとデータをプリントアウトとなりますデータベースへのアクティブな接続が存在している間も動作します。もちろん、これらの接続のパフォーマンスは影響を受ける可能性がありますが、結果として得られるDBのコピーは トランザクションです。
pg_dump --host=rds.example.com --port=5432 \
--format=custom \
--username=db_dev_user --dbname=dev_db \
> pgdumped
createuserはのコマンドは、テストアプリケーション/プロセスが作成したユーザがスーパーユーザでないこと(優れたアイソレーション用)、ノートに接続する必要があることをユーザーが作成され、それがデータベースや役割を作成することはできません。
createuser --host=rds.example.com --port=5432 \
--username=rds_master \
--no-createdb --no-createrole --no-superuser \
--login --pwprompt \
db_test_user
この次の許可コマンドcreatedb
がないと、以下は失敗します。
psql --host=rds.example.com --port=5432 \
--username=rds_master --dbname=postgres \
--command="grant db_test_user TO rds_master"
createdbは、缶に書かれていることを行います。db_test_user
ロールがDBを「所有」していることに注意してください。
createdb --host=rds.example.com --port=5432 \
--username=rds_master --owner=db_test_user test_db
次はスキーマの作成コマンドです。db_test_user
スキーマを作成することはできませんが、それは、スキーマのために承認されなければならないか、pg_restore
それがに復元しようとして終わるだろうので、失敗するpg_catalog
スキーマ(そのノートのでuser=rds_master
、しかしdbname=test_db
)。
psql --host=rds.example.com --port=5432 \
--username=rds_master --dbname=test_db \
--command="create schema app_schema authorization db_test_user"
最後に、pg_restoreコマンドを発行します。
pg_restore --host=rds.example.com --port=5432 \
--verbose --exit-on-error --single-transaction \
--username=db_test_user --schema=app_schema \
--dbname=test_db --no-owner \
./pgdumped
exit-on-error
-それ以外の場合、何が悪かったのかを見つけるには、スクロールとスキャンが多すぎるためsingle-transaction
です(とにかくそれは暗示されています)single-transaction
-物事が洋ナシ型になった場合にDBを削除または再作成する必要がなくなりますschema
-気になるスキーマのみを実行します(これを元のpg_dump
コマンドに提供することもできます)dbname
-作成したDBを確実に使用するためno-owner
-db_test_user
とにかく接続しているので、すべてを適切なユーザーが所有する必要がありますこの記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加