Docker が PostgreSQL を起動するときに複数のデータベースを作成するためのソリューション

Docker が PostgreSQL を起動するときに複数のデータベースを作成するためのソリューション

1 はじめに

「DockerでPostgreSQLを起動する方法といくつかの接続ツールのおすすめ」の記事で、 Docker経由でPostgreSQL起動する方法を紹介しましたが、データベースは1つしかありません。同じDockerコンテナ上に複数のデータベースを作成したい場合はどうすればよいでしょうか。

2 2つの解決策

1 つの解決策は、 shell/sqlスクリプトを/docker-entrypoint-initdb.d/ディレクトリに配置し、コンテナーの起動時に自動的に作成することです。もう 1 つの解決策は、 shellスクリプトを使用して作成を指定することですが、基本的には同じです。ここで紹介するのは最初のものだけです。

shellスクリプトまたはsqlスクリプトを指定されたディレクトリに配置すると、自動的に実行されます。どちらのスクリプトでもかまいません。

以下はshellスクリプトの例です。

#!/bin/bash

セット-e
セット-u

関数create_user_and_database() {
	ローカルデータベース=$1
	echo " ユーザーとデータベース '$database' を作成しています"
	psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
	    ユーザー $database を作成します。
	    データベースを作成します $database;
	    データベース $database のすべての権限を $database に付与します。
EOSQL
}

if [ -n "$POSTGRES_MULTIPLE_DATABASES" ]; then
	echo "複数のデータベースの作成が要求されました: $POSTGRES_MULTIPLE_DATABASES"
	$(echo $POSTGRES_MULTIPLE_DATABASES | tr ',' ' '); のdbに対して
		ユーザーとデータベースの作成 $db
	終わり
	echo "複数のデータベースが作成されました"
フィ

以下はsqlスクリプトの例です。

ユーザー pkslowuser を作成します。

データベース logdata を作成します。
データベース logdata のすべての権限を pkslowuser に付与します。

データベース orderdata を作成します。
データベース orderdata のすべての権限を pkslowuser に付与します。

データベースuserdataを作成します。
データベース userdata のすべての権限を pkslowuser に付与します。

3 パッケージングと起動

Dockerfileを準備し、 shell/sqlスクリプト ファイルをイメージに配置します。

postgres:10 から
src/main/resources/create-multiple-postgresql-databases.sh /docker-entrypoint-initdb.d/ をコピーします。
src/main/resources/create-multiple-postgresql-databases.sql /docker-entrypoint-initdb.d/ をコピーします。

次のように開始します。

docker run -itd \
    --name pkslow-postgres \
    -e POSTGRES_MULTIPLE_DATABASES=db1,db2 \
    -e POSTGRES_USER=pkslow \
    -e POSTGRES_PASSWORD=pkslow \
    -p 5432:5432 \
    pkslow/postgresql-複数データベース:1.0-SNAPSHOT

起動が成功すると、次のデータベースが作成されます。

db1、db2、
ログデータ、注文データ、ユーザーデータ

4 結論

これは開発およびテスト段階で使用されるソリューションです。実際、データベースをコンテナに配置するのは良い選択ではありません。

コードを確認してください: https://github.com/LarryDpk/pkslow-samples

以上で、Docker で PostgreSQL を起動する際に複数のデータベースを作成する方法についての記事は終了です。Docker で PostgreSQL を起動する方法の詳細については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker デプロイメント postgresql データベースについて
  • Docker で PostgreSQL を実行し、いくつかの接続ツールを推奨する
  • ローカル Docker に Postgres 12 + pgadmin をインストールする方法 (Apple M1 をサポート)
  • Docker環境でPostgreSQLをアップグレードする詳細な手順
  • docker で PostgreSQL データベースをインストールして永続化する方法
  • dockerでPostgreSQLを実行する方法
  • docker 環境でのデータベース バックアップ (postgresql、mysql) のサンプル コード
  • docker をデプロイして postgres データベースにアクセスする方法

<<:  HTML4.0 要素のデフォルトスタイルの配置

>>:  MySQL binlog の解析

推薦する

WeChatアプレットは左にスワイプしてリスト項目を削除する効果を実現

この記事では、WeChatミニプログラムの具体的なコードを共有し、左にスワイプしてリスト項目を削除す...

MySQL 接続失敗の一般的な障害と原因

==================================================...

MySQL のインデックスと制約の例文

外部キーテーブルの主キーがどのテーブルの外部キーであるかを照会する 選択 テーブル名、 列名、 制約...

VueはEChartsを使用して折れ線グラフと円グラフを実装します

バックエンド管理プロジェクトを開発する場合、バックエンドのユーザーデータをカウントし、折れ線グラフや...

JavaScript コンソールのその他の機能

目次概要コンソールログコンソール.infoコンソール.警告コンソールエラーコンソールテーブルコンソー...

Vue で動的パラメータと計算プロパティを使用する方法

1. 動的パラメータ2.6.0 以降では、角括弧で囲まれた JavaScript 式をディレクティブ...

Mysql5.7 のグループ連結関数を使用するときにデータが切り捨てられる問題に対する完璧な解決策

一昨日、本番環境でGROUP_CONCAT関数を使用して選択したデータが切り捨てられ、最大長が102...

Js でオブジェクトのディープ オブジェクトを安全に取得するメソッドの例

目次序文文章パラメータ例Lodash 実装:トーキー機能: castPath関数: stringTo...

js を使用して過去 1 週間、1 か月、3 か月の時間を取得する簡単な例

目次過去1週間の時間を取得する過去1か月の時間を取得する過去3か月分を取得新しい Date() と ...

CSS における XHTML タグの対応する属性と使用法

XHTML CSS を使って Web ページをデザインし始めた頃は、タグの使用経験も少なく、あまり気...

固定テーブル幅テーブルレイアウト: 固定

テーブルを画面全体(残りの空白領域)に表示するために、幅属性は 100% と定義されることが多く、セ...

Nginx ロードバランシングとは何か、そしてそれをどのように設定するか

負荷分散とは負荷分散は主に、専用のハードウェア デバイスまたはソフトウェア アルゴリズムによって実現...

Vue3 の ref と toRef の違いを簡単に分析します

1. refがコピーされ、ビューが更新されますrefを使用してオブジェクトのプロパティ値をレスポンシ...

JavaScript es6 における var、let、const の違いの詳細な説明

まず、よくある質問は、ECMAScript と JavaScript の関係は何ですか? ECMAS...