sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo usar un contenedor PostgreSQL con datos existentes?

Para aprovechar la respuesta de irakli, aquí hay una solución actualizada:

  • usar el archivo Docker Compose de la versión 2 más reciente
  • separar volumes sección
  • configuraciones adicionales eliminadas

docker-compose.yml

version: '2'

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

volumes:
  data: {}

demostración

Inicie el servidor de base de datos de Postgres:

$ docker-compose up

Mostrar todas las tablas de la base de datos. En otra terminal, hable con el Postgres del contenedor:

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

No mostrará nada, ya que la base de datos está en blanco. Crear una tabla:

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

Enumere la tabla recién creada:

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

¡Hurra! Ahora comenzamos una base de datos de Postgres usando un volumen de almacenamiento compartido y almacenamos algunos datos en él. El siguiente paso es verificar que los datos se mantengan después de que el servidor se detenga.

Ahora, elimine el contenedor del servidor de Postgres:

$ docker-compose stop

Vuelva a iniciar el contenedor de Postgres:

$ docker-compose up

Esperamos que el servidor de la base de datos reutilice el almacenamiento, por lo que nuestros datos muy importantes aún están allí. Comprobar:

$ 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 con éxito un archivo Docker Compose de nuevo estilo para ejecutar una base de datos de Postgres usando un volumen de datos externo y comprobamos que mantiene nuestros datos sanos y salvos.

almacenamiento de datos

Primero, haga una copia de seguridad, almacenando nuestros datos en el host:

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

Elimina nuestros datos de la base de datos de invitados:

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

Restaure nuestra copia de seguridad (almacenada en el host) en el contenedor de Postgres.

Nota: use "exec -i", no "-it", de lo contrario obtendrá un error "el dispositivo de entrada no es un TTY".

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

Enumere las tablas para verificar que la restauración funcionó:

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

En resumen, hemos verificado que podemos iniciar una base de datos, los datos persisten después de un reinicio y podemos restaurar una copia de seguridad desde el host.

¡Gracias Tomasz!