Lösung zum Erstellen mehrerer Datenbanken, wenn Docker PostgreSQL startet

Lösung zum Erstellen mehrerer Datenbanken, wenn Docker PostgreSQL startet

1 Einleitung

Im Artikel „PostgreSQL mit Docker starten und mehrere Verbindungstools empfehlen“ haben wir vorgestellt, wie man PostgreSQL über Docker startet, aber es gibt nur eine Datenbank. Was ist, wenn Sie mehrere Datenbanken im selben Docker Container erstellen möchten?

2 Zwei Lösungen

Eine Lösung besteht darin, shell/sql -Skript in das Verzeichnis /docker-entrypoint-initdb.d/ zu legen und es beim Starten des Containers automatisch erstellen zu lassen; die andere Lösung besteht darin, die Erstellung über ein shell -Skript anzugeben, was im Wesentlichen dasselbe ist. Hier wird nur der erste vorgestellt.

Legen Sie das shell -Skript oder sql -Skript in das angegebene Verzeichnis und es wird automatisch ausgeführt. Beide Skripte sind zulässig.

Das Folgende ist ein Beispiel für shell -Skript:

#!/bin/bash

setze -e
setze -u

Funktion Benutzer_und_Datenbank erstellen() {
	lokale Datenbank=$1
	echo "Erstelle Benutzer und Datenbank '$database'"
	psql -v ON_ERROR_STOP=1 --Benutzername "$POSTGRES_USER" <<-EOSQL
	    BENUTZER $database ERSTELLEN;
	    DATENBANK ERSTELLEN $database;
	    Gewähren Sie alle Berechtigungen für die Datenbank $database an $database.
EOSQL
}

wenn [ -n "$POSTGRES_MULTIPLE_DATABASES" ]; dann
	echo "Erstellung mehrerer Datenbanken angefordert: $POSTGRES_MULTIPLE_DATABASES"
	für db in $(echo $POSTGRES_MULTIPLE_DATABASES | tr ',' ' '); machen
		Benutzer_und_Datenbank erstellen $db
	Erledigt
	echo "Mehrere Datenbanken erstellt"
fi

Das Folgende ist ein Beispiel für ein sql -Skript:

BENUTZER pkslowuser ERSTELLEN;

DATENBANK ERSTELLEN logdaten;
Gewähren Sie pkslowuser alle Berechtigungen für die Datenbank-Logdaten.

DATENBANK ERSTELLEN Bestelldaten;
Gewähren Sie pkslowuser alle Berechtigungen für die Datenbank Orderdata.

DATENBANK ERSTELLEN Benutzerdaten;
Gewähren Sie pkslowuser alle Berechtigungen für die Datenbank Benutzerdaten.

3 Verpackung und Inbetriebnahme

Bereiten Sie Dockerfile vor und fügen Sie shell/sql -Skriptdatei in das Image ein:

VON postgres:10
KOPIEREN src/main/resources/create-multiple-postgresql-databases.sh /docker-entrypoint-initdb.d/
KOPIEREN src/main/resources/create-multiple-postgresql-databases.sql /docker-entrypoint-initdb.d/

Beginnen Sie wie folgt:

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-mehrere-datenbanken:1.0-SNAPSHOT

Nach dem erfolgreichen Start wird folgende Datenbank erstellt:

db1, db2,
Logdaten, Auftragsdaten, Benutzerdaten

4 Fazit

Dies ist eine Lösung, die in der Entwicklungs- und Testphase verwendet wird. Tatsächlich ist es keine gute Wahl, die Datenbank in einem Container zu platzieren.

Bitte überprüfen Sie den Code: https://github.com/LarryDpk/pkslow-samples

Damit ist dieser Artikel über das Erstellen mehrerer Datenbanken beim Starten von PostgreSQL mit Docker abgeschlossen. Weitere Informationen zum Starten von PostgreSQL mit Docker finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Informationen zur Docker-Bereitstellung einer PostgreSQL-Datenbank
  • Ausführen von PostgreSQL in Docker und Empfehlung verschiedener Verbindungstools
  • So installieren Sie Postgres 12 + pgadmin im lokalen Docker (unterstützt Apple M1)
  • Detaillierte Schritte zum Upgrade von PostgreSQL in der Docker-Umgebung
  • So installieren und speichern Sie die PostgreSQL-Datenbank in Docker
  • So führen Sie PostgreSQL mit Docker aus
  • Beispielcode für Datenbanksicherung in einer Docker-Umgebung (PostgreSQL, MySQL)
  • So stellen Sie Docker bereit, um auf die Postgres-Datenbank zuzugreifen

<<:  Analysieren des MySQL-Binärprotokolls

>>:  So implementieren Sie Seitensprünge in einem Vue-Projekt

Artikel empfehlen

Details der benutzerdefinierten Vue-Anweisung

Inhaltsverzeichnis 1. Hintergrund 2. Lokale benut...

CSS-Stil zum Zentrieren des HTML-Tags im Browser

CSS-Stil: Code kopieren Der Code lautet wie folgt:...

Detailliertes Tutorial zum Ersetzen von mysql8.0.17 in Windows 10

In diesem Artikel werden die spezifischen Schritt...

Lösung zum Einfügen eines Formulars mit einer Leerzeile oben und unten

Ich weiß nicht, ob Ihnen beim Erstellen einer Webs...

Tutorial zur Tomcat-Konfiguration für Nginx/Httpd-Lastausgleich

Im vorherigen Blog haben wir über die Verwendung ...

Grundlegende Kenntnisse zur MySQL-Wurmreplikation

Würmer replizieren sich, wie der Name schon sagt,...

Erläuterung, ob im interaktiven Design Paging oder Laden gewählt werden soll

Der Autor dieses Artikels @子木yoyo hat ihn in seine...

Realisierung der Echtzeit-Dateisynchronisierung zwischen Linux-Servern

Anwendungsszenarien Bei vorhandenen Servern A und...