Aqui é mantido um repositório com as soluções que trabalhamos no dojo de codificação da Guilda JEDI (Junta Especializada de Desenvolvimento e Inovação) em https://discord.gg/eBNamXVtBW
FROM postgres:alpine
ADD scripts/1_init.sql /docker-entrypoint-initdb.d
ADD scripts/2_copy.sql /docker-entrypoint-initdb.d
RUN chmod a+r /docker-entrypoint-initdb.d/*
EXPOSE 6666
1_init.sql body:
CREATE TABLE table_name
(
--statement body
);
And 2_copy.sql:
COPY table_name FROM '/data/datasource.csv' DELIMITER ',' CSV HEADER;
Explanation
O script 1_init.sql cria a tabela do banco de dados, Ela contém as colunas com os mesmos nomes dos campos do arquivo CSV. E o script 2_copy.sql é responsável por copiar os dados do CSV para o postgres;
Dockerfile usa a imagem do postgres e copia todos os arquivos sql ( *.sql) para container/docker-entrypoint-initdb.d/;
Depois todos os arquivos são executados em ordem alfabética, Por isso os scripts iniciam com digito, para garantir a ordem de execução. Finalmente a porta 6666 é exposta;
O docker-compose.yml constroi o container Dockerfile a partir do diretório db e torna acessível através da porta 5431. As environmental properties basic postgres properties are used. And at the end data folder with CSV file is copied to the container.
Coding Dojo
Guilda JEDI Incolume - Grupo Python Incolume
Problema
Carregamento de dados no postgres em docker
Project structure
Files
CSV file is located in data folder inside of the project.
In the project folder there is the following docker-compose.yml file:
1_init.sql body:
And 2_copy.sql:
Explanation
Referências
https://stackoverflow.com/a/56774266/5132101