PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como usar um contêiner PostgreSQL com dados existentes?


Para aproveitar a resposta de irakli, aqui está uma solução atualizada:
  • usar o arquivo do Docker Compose da versão 2 mais recente
  • separe volumes seção
  • configurações extras excluídas

docker-compose.yml

version: '2'

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

volumes:
  data: {}

demonstração


Inicie o servidor de banco de dados Postgres:
$ docker-compose up

Mostra todas as tabelas do banco de dados. Em outro terminal, fale com o Postgres do container:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'

Não mostrará nada, pois o banco de dados está em branco. Crie uma tabela:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'create table beer()'

Liste a tabela recém-criada:
$ 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! Agora iniciamos um banco de dados Postgres usando um volume de armazenamento compartilhado e armazenamos alguns dados nele. O próximo passo é verificar se os dados realmente permanecem após o servidor parar.

Agora, mate o container do servidor Postgres:
$ docker-compose stop

Inicie o contêiner Postgres novamente:
$ docker-compose up

Esperamos que o servidor de banco de dados reutilize o armazenamento, portanto, nossos dados muito importantes ainda estão lá. Verificar:
$ 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 |                   | 

Usamos com sucesso um arquivo Docker Compose de novo estilo para executar um banco de dados Postgres usando um volume de dados externo e verificamos se ele mantém nossos dados sãos e salvos.

armazenando dados


Primeiro, faça um backup, armazenando nossos dados no host:
$ docker exec -it $(docker-compose ps -q postgres9 ) pg_dump -Upostgres > backup.sql

Zap nossos dados do banco de dados de convidados:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'drop table beer'

Restaure nosso backup (armazenado no host) no container Postgres.

Observação: use "exec -i", não "-it", caso contrário, você receberá um erro "dispositivo de entrada não é um TTY".
$ docker exec -i $(docker-compose ps -q postgres9 ) psql -Upostgres < backup.sql

Liste as tabelas para verificar se a restauração funcionou:
$ 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 |                   | 

Para resumir, verificamos que podemos iniciar um banco de dados, os dados persistem após uma reinicialização e podemos restaurar um backup a partir do host.

Obrigado Tomasz!