Ejecutar script SQL con Postgres & Docker

Muchas veces, al ejecutar un contenedor Docker para Postgres, deseamos inicializar el servidor o la base de datos creada con ciertos scripts previamente creados. En este artículo les mostraré cómo ejecutar un contenedor para Postgres agregando las dos siguientes actividades:

1. Ejecutar un script para inicializar las tablas maestras
Esto normalmente se realiza con la instrucción:
psql -U postgres veronica < veronica.sql
Pero en el caso de Docker, podemos agregar el script al directorio /docker-entrypoint-initdb.d/ y Docker ejecutará automáticamente dicho script luego de iniciar el servicio de base de datos.

2. Agregar una llave para encriptación que será utilizada por la extensión pgcrypto.
Si no utilizamos docker, bastaría con realizar lo siguiente
postgres -c encrypt.key=a_secret_key
Ahora, ambas configuraciones se pueden hacer también directamente con Docker tal como se muestra en el siguiente Dockerfile:
FROM postgres:11.3

# About the author
MAINTAINER Rolando Rodríguez <rolando.roc@gmail.com>

# Environment variables

# Set Postgres environment variables
ENV POSTGRES_PASSWORD=123456 
    POSTGRES_USER=postgres 
    POSTGRES_DB=sample

# Get a sql script and move it to initialization scripts folder
ADD https://raw.githubusercontent.com/rolandopalermo/veronica/master/veronica-app/src/main/postgres/veronica.sql /docker-entrypoint-initdb.d/

# Make sql script executable
RUN chmod 744 /docker-entrypoint-initdb.d/veronica.sql

# Expose the PostgreSQL port
EXPOSE 5432

# Run a command, for example: $ postgres -c encrypt.key=8qxBjzCdQkwdpu
CMD ["postgres", "-c", "encrypt.key=8qxBjzCdQkwdpu"]
Para más información, puedes revisar el siguiente repositorio: https://github.com/rolandopalermo/dockerfiles/tree/master/postgres-run-sql-command

Comentarios