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

9 praktische CSS-Eigenschaften, die Web-Frontend-Entwickler kennen müssen

1. Abgerundete Ecken Heutige Webdesigns halten stä...

Tipps zur Optimierung von MySQL SQL-Anweisungen

Wenn wir mit einer SQL-Anweisung konfrontiert wer...

So implementieren Sie ein Dropdown-Menü für die HTML-Eingabe

Code kopieren Der Code lautet wie folgt: <html...

Lösen Sie das Problem, dass Docker das MySQL-Image zu langsam zieht

Nachdem wir eine halbe Stunde lang versucht hatte...

HTML-Maus-CSS-Steuerung

Im Allgemeinen wird die Maus als nach oben gericht...

Beispielcode zur Implementierung von Anti-Shake in Vue

Anti-Shake: Verhindert, dass wiederholte Klicks E...

js behandelt die Kontoabmeldung beim Schließen des Browsers

Inhaltsverzeichnis Klassischer Ansatz Frage Weite...

So verwenden Sie Xtrabackup zum Sichern und Wiederherstellen von MySQL

Inhaltsverzeichnis 1. Sicherung 1.1 Vollständig v...

Beispielerklärung für langsame MySQL-Abfragen und -Protokolle

1. Einleitung Durch Aktivieren des Slow Query Log...

Detailliertes Tutorial zur Installation von Docker auf CentOS 7.5

Einführung in Docker Docker ist eine Open-Source-...

Detaillierte Erklärung zur Lösung des Problems zu langer Inhalte in CSS

Wenn wir CSS schreiben, vergessen wir manchmal di...