PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie verwende ich einen PostgreSQL-Container mit vorhandenen Daten?

Um auf der Antwort von irakli aufzubauen, hier eine aktualisierte Lösung:

  • neuere Version 2 Docker Compose-Datei verwenden
  • getrennte volumes Abschnitt
  • zusätzliche Einstellungen gelöscht

docker-compose.yml

version: '2'

services:
  postgres9:
    image: postgres:9.4
    expose:
      - 5432
    volumes:
      - data:/var/lib/postgresql/data

volumes:
  data: {}

Demo

Starten Sie den Postgres-Datenbankserver:

$ docker-compose up

Alle Tabellen in der Datenbank anzeigen. Sprechen Sie in einem anderen Terminal mit Postgres des Containers:

$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'

Es wird nichts angezeigt, da die Datenbank leer ist. Erstellen Sie eine Tabelle:

$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'create table beer()'

Listen Sie die neu erstellte Tabelle auf:

$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'

                         Access privileges
 Schema |   Name    | Type  | Access privileges | Column access privileges 
--------+-----------+-------+-------------------+--------------------------
 public | beer      | table |                   | 

Yay! Wir haben jetzt eine Postgres-Datenbank mit einem gemeinsam genutzten Speichervolume gestartet und einige Daten darin gespeichert. Der nächste Schritt besteht darin, zu überprüfen, ob die Daten tatsächlich vorhanden sind, nachdem der Server gestoppt wurde.

Beenden Sie jetzt den Container des Postgres-Servers:

$ docker-compose stop

Starten Sie den Postgres-Container erneut:

$ docker-compose up

Wir gehen davon aus, dass der Datenbankserver den Speicher wiederverwendet, sodass unsere sehr wichtigen Daten immer noch vorhanden sind. Überprüfen Sie:

$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
                         Access privileges
 Schema |   Name    | Type  | Access privileges | Column access privileges 
--------+-----------+-------+-------------------+--------------------------
public | beer      | table |                   | 

Wir haben erfolgreich eine Docker-Compose-Datei neuen Stils verwendet, um eine Postgres-Datenbank mit einem externen Datenvolume auszuführen, und überprüft, ob sie unsere Daten sicher und zuverlässig hält.

Speichern von Daten

Erstellen Sie zuerst ein Backup und speichern Sie unsere Daten auf dem Host:

$ docker exec -it $(docker-compose ps -q postgres9 ) pg_dump -Upostgres > backup.sql

Zappen Sie unsere Daten aus der Gästedatenbank:

$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'drop table beer'

Stellen Sie unser Backup (auf dem Host gespeichert) im Postgres-Container wieder her.

Hinweis: Verwenden Sie "exec -i", nicht "-it", andernfalls erhalten Sie einen "Eingabegerät ist kein TTY"-Fehler.

$ docker exec -i $(docker-compose ps -q postgres9 ) psql -Upostgres < backup.sql

Listen Sie die Tabellen auf, um zu überprüfen, ob die Wiederherstellung funktioniert hat:

$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
                         Access privileges
Schema |   Name    | Type  | Access privileges | Column access privileges 
--------+-----------+-------+-------------------+--------------------------
public | beer      | table |                   | 

Zusammenfassend haben wir verifiziert, dass wir eine Datenbank starten können, die Daten nach einem Neustart bestehen bleiben und wir eine Sicherung vom Host darin wiederherstellen können.

Danke Tomasz!