sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan bruger man en PostgreSQL container med eksisterende data?

For at bygge videre på iraklis svar er her en opdateret løsning:

  • brug nyere version 2 Docker Compose-fil
  • separate volumes afsnit
  • ekstra indstillinger slettet

docker-compose.yml

version: '2'

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

volumes:
  data: {}

demo

Start Postgres databaseserver:

$ docker-compose up

Vis alle tabeller i databasen. I en anden terminal skal du tale med containerens Postgres:

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

Det vil ikke vise noget, da databasen er tom. Opret en tabel:

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

Liste over den nyoprettede tabel:

$ 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! Vi har nu startet en Postgres-database ved hjælp af en delt lagervolumen og gemt nogle data i den. Næste trin er at kontrollere, at dataene rent faktisk bliver ved, når serveren stopper.

Dræb nu Postgres-serverbeholderen:

$ docker-compose stop

Start Postgres-beholderen op igen:

$ docker-compose up

Vi forventer, at databaseserveren vil genbruge lageret, så vores meget vigtige data er der stadig. Tjek:

$ 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 |                   | 

Vi har med succes brugt en ny Docker Compose-fil til at køre en Postgres-database ved hjælp af en ekstern datavolumen og kontrolleret, at den holder vores data i sikkerhed.

lagring af data

Først skal du lave en sikkerhedskopi og gemme vores data på værten:

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

Zap vores data fra gæstedatabasen:

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

Gendan vores backup (gemt på værten) i Postgres-beholderen.

Bemærk: brug "exec -i", ikke "-it", ellers får du en "inputenhed er ikke en TTY"-fejl.

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

Liste over tabellerne for at bekræfte, at gendannelsen virkede:

$ 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 |                   | 

For at opsummere, har vi bekræftet, at vi kan starte en database, dataene fortsætter efter en genstart, og vi kan gendanne en sikkerhedskopi til den fra værten.

Tak Tomasz!



  1. Effektiv overvågning af MySQL-replikering med SCUMM-dashboards:Del 2

  2. Sådan ændres baggrundsfarve for en formularoverskrifter i Access 2016

  3. Hvordan SID er forskellig fra tjenestenavn i Oracle tnsnames.ora

  4. Oracle FOR LOOP REVERSE Eksempel