RDSインスタンス内でPostgreSQLRDSデータベースをコピーする方法

とげ

私はこれを行うのに非常に苦労しました-私はプロセスを説明するためにStackOverflowでQ / Aを行うと思いました。

問題は、開発用にRDS postgresデータベースをコピーすることです。特に、データベース移行スクリプトのテストなどに使用します。そのため、「単一データベース」内の「単一スキーマ」に焦点を当てています。

私の場合、単一のRDSインスタンス内にとどまりながら、可能な限り分離されたテストデータベースを作成したいと思います(RDSインスタンス全体のスピンアップには5〜15分かかり、安価であるため)。

とげ

これは、コマンドラインのみを使用した回答です。

前提条件:

  • Postgresクライアントツールがインストールされている必要があります(実際のサーバーは必要ありません)
    • バージョンはpostgresバージョンと同じかそれ以上である必要があります
  • RDSインスタンスへのネットワークアクセス
  • 関連するデータベースアカウントにアクセスするための資格情報

コンテキストの例:

  • rds.example.comという名前のマスターユーザーがいるRDSインスタンスがありますrds_master
  • スキーマを含むdb_dev_userという名前のデータベースであるという名前の「アプリケーションユーザー」dev_dbがいますapp_schema
  • postgresの「user」と「role」は同義語であることに注意してください

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]

編集
0

コメントを追加

0

関連記事

Amazon RDS MySQLインスタンスからローカルインスタンスにデータベースをエクスポートする方法

Railsコンソールでデータベース間をコピーする

異なるコンピューターで同じデータベースを使用する方法

データベーステーブルのコピーを別のコンピュータに作成する方法

vimの異なるインスタンス間でデータをコピーする方法は?

異なるタイムゾーンでデータベースレコードをテストする方法は?

MySQLデータベースでJavaインスタントを保存する方法

フラグメント内のデータベースをコピーして、AndroidStudioで使用する

Pythonでクラスインスタンスをコピーする方法

MongoDBで1つのデータベースから別のデータベースにコレクションをコピーする方法

マングースのデータベースをコピーする

persistence.xmlでJPAデータベースインスタンスを「パラメーター化」する方法

スクレイピングされたデータをpostgresqlデータベースに送信する方法

データベースをオンラインでホストする方法

AWS RDS SqlServerインスタンスでデータベースを1つだけ復元します

Dockerコンテナ内のpostgresデータベースを削除する方法

Luceneデータベースでインデックスを作成する方法(Cassandra)

Compute Engineでインスタンスを複製/コピーする方法は?

Compute Engineでインスタンスを複製/コピーする方法は?

インスタンスデータを既存のクラス参照にコピーする方法は?C#

Djangoモデルインスタンスとすべての関連データをコピーする方法

Akka PersistenceCassandraデータベースをコピーする方法

私のコンピュータにあるデータベースからデータを取得する方法。アンドロイド

コンピューターのMicrosoftManagement Studioで作成されたデータベースを見つける方法は?

同じSQLインスタンスに大きなデータベースをコピーする最も簡単な方法

データベースのコマンドを使用してスクレイピングされたデータを保存する方法

PeeweeORM-メインデータベースの複数のデータベースからデータをコピーする

postgresqlデータベースをあるコンピューターから別のコンピューターに移動する方法は?

データベースコンテンツからスピナーにデータを入力する(SQLite)

TOP 一覧

  1. 1

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  2. 2

    Railsで宝石のレイアウトを使用するにはどうすればよいですか?

  3. 3

    Chromeウェブアプリのウェブビューの高さの問題

  4. 4

    Ansibleで複数行のシェルスクリプトを実行する方法

  5. 5

    アンドロイド9 - キーストア例外android.os.ServiceSpecificException

  6. 6

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  7. 7

    CSSのみを使用して三角形のアニメーションを作成する方法

  8. 8

    Google Playストア:アプリページにリーダーボードと実績のアイコン/バッジが表示されない

  9. 9

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  10. 10

    PyCharmリモートインタープリターはプロジェクトタブにサイトパッケージのコンテンツを表示しません

  11. 11

    Windows 7では、一部のプログラムは「ビジュアルテーマを無効にする」レジストリ設定を行いませんか?

  12. 12

    Get-ADGroupMember:このリクエストのサイズ制限を超えました

  13. 13

    Pyusb can't find a device while libusb can

  14. 14

    MySQLでJSON_LENGTHとJSON_EXTRACTを組み合わせる方法は?

  15. 15

    Postmanを使用してファイル付きの(ネストされた)jsonオブジェクトを送信する

  16. 16

    Swiftのブロックのパラメーターに関するドキュメントのマークアップ形式は何ですか?

  17. 17

    Reactでclsxを使用する方法

  18. 18

    追加後、ブートストラップマルチセレクトがテーブルで機能しない

  19. 19

    MongoDB Compass: How to select Distinct Values of a Field

  20. 20

    「埋め込みブラウザのOAuthログイン」を有効にしてコールバックURLを指定した後でも、Facebookのコールバックエラーが発生する

  21. 21

    複数行ヘッダーのJTableヘッダーテキストの折り返し(カスタムTableCellRenderer)

ホットタグ

アーカイブ