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

Come utilizzare un contenitore PostgreSQL con dati esistenti?

Per basarsi sulla risposta di irakli, ecco una soluzione aggiornata:

  • usa il file Docker Compose della versione 2 più recente
  • Separare volumes sezione
  • impostazioni extra eliminate

docker-compose.yml

version: '2'

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

volumes:
  data: {}

dimostrazione

Avvia il server del database Postgres:

$ docker-compose up

Mostra tutte le tabelle nel database. In un altro terminale, parla con Postgres del container:

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

Non mostrerà nulla, poiché il database è vuoto. Crea una tabella:

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

Elenca la tabella appena creata:

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

Sìì! Ora abbiamo avviato un database Postgres utilizzando un volume di archiviazione condiviso e archiviato alcuni dati in esso. Il passaggio successivo consiste nel verificare che i dati rimangano effettivamente presenti dopo l'arresto del server.

Ora, uccidi il contenitore del server Postgres:

$ docker-compose stop

Riavvia il container Postgres:

$ docker-compose up

Ci aspettiamo che il server del database riutilizzi lo spazio di archiviazione, quindi i nostri dati molto importanti sono ancora lì. Verifica:

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

Abbiamo utilizzato con successo un file Docker Compose di nuovo stile per eseguire un database Postgres utilizzando un volume di dati esterno e verificato che mantenga i nostri dati sani e salvi.

memorizzare i dati

Per prima cosa, fai un backup, memorizzando i nostri dati sull'host:

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

Scarica i nostri dati dal database degli ospiti:

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

Ripristina il nostro backup (memorizzato sull'host) nel contenitore Postgres.

Nota: usa "exec -i", non "-it", altrimenti otterrai un errore "il dispositivo di input non è un TTY".

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

Elenca le tabelle per verificare che il ripristino abbia funzionato:

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

Per riassumere, abbiamo verificato che possiamo avviare un database, i dati persistono dopo un riavvio e possiamo ripristinarne un backup dall'host.

Grazie Tomasz!