Docker para rodar o banco do Salic para desenvolvimento(SQL Server) e ferramenta de importação de dados.
Este projeto possui duas vertentes, são elas:
- Uma estrutura básica do salic, com todas as tabelas de apoio e um usuário administrador com todos os perfis do sistema.
- Uma ferramenta de migração em python, que faz cópia de informações de um banco de origem para um banco destino.
Atualmente existe alguns problemas para compartilhamento de volume e mapeamentos de portas nessa imagem para o MacOS o comando abaixo resolve.
docker-compose run --rm --service-ports salic-mssql
Ajustar o docke-compose.yml para linux
Fazer o build para gerar as tabelas com dados iniciais
docker-compose up --build
Sem gerar tabelas
docker-compose up
work in progress
Este container conta com uma ferramenta de migração, que permite que dados sejam migrados de um banco para outro. Isso vale para qualquer banco com inserção autorizada por credenciais. É possível escolher uma fonte de dados num banco de produção, desenvolvimento, homologação etc, e definir um banco alvo - um docker ou mesmo um banco de hmg/dev.
Para configurar os bancos de dados, preencha os dados para db_source (origem) e db_target (destino) no arquivo migrate/dbconfig.py:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
db_config = {
"db_source": {
"host": "otherhost",
"user": "user",
"pass": "password",
"port": "1434",
"dbname": "sac",
"schema": "dbo",
},
"db_target": {
"host": "localhost",
"user": "SA",
"pass": "salic@123456",
"port": "1433",
"dbname": "sac",
"schema": "dbo",
}
}
Atualmente, a ferramenta de importação possui duas funcionalidades: migrate e flush
Executa a importação de dados a partir de um db_source para um db_target.
Apaga todos os dados das tabelas especificadas para um db_target.
Ao fazer o build do docker-compose, uma primeira migração será executada. Ela contém diversas tabelas de apoio e usuários padrão para realizar login.
Para gerar uma migração com os dados do seu módulo (ex: parecer, readequação, comprovação financeira etc) é necessário criar os arquivos de tabelas com as respectivas condições de importação, na pasta migrate/tables/[nomedomodulo].
Cada pasta de módulo contém arquivos de definição de tabelas, separadas por arquivos com o padrão '[00]-[nomedobanco].[schema].tbl'. No caso, 00 seria a ordem de execução, nomedobanco o nome do database, e schema. Os arquivos devem possuir a terminação .tbl e obedecer o padrão descrito; caso contrário, não serão executados. Exemplos válidos para o salic de definições de bancos válidas:
$ ls migrate/tables/0-initial
00-agentes.dbo.tbl
01-sac.dbo.tbl
02-tabelas.dbo.tbl
Dentro dos arquivos de definição de tabelas, o padrão é o abaixo:
[nome_da_tabela]|[CONDIÇÕES]|[chave_primária]
Num caso real, seria:
tipos_pessoa||
categorias_pessoa||
pessoas|INNER JOIN tabelas.dbo.Usuarios on usuarios.usu_pessoa = pessoas.pes_codigo and usuarios.usu_identificacao = '12345678900'|
pessoa_identificacoes|INNER JOIN tabelas.dbo.orgaos on orgaos.org_pessoa = pessoa_identificacoes.pid_pessoa|pid_pessoa
Toda tabela que precisar de JOINs ou de restrições WHERE deve ter esse tipo de dado preenchido na segunda posição entre | (pipes). Caso esse campo estiver vazio, o SQL executado será um SELECT * FROM sem restrições. O mesmo vale para chave primária: caso não seja especificada, o script buscará pela primeira chave primária informada no banco.
Outro detalhe importante é a ordem de execução: primeiro as tabelas assistentes, ou com dados que servirão a relacionamentos (constraints). No caso de um FLUSH, a ordem de execução é invertida - isto é, são executadas as instruções de baixo primeiro. No FLUSH até o momento não existe a opção de exclusão condicional de uma tabela, o que quer dizer que todos os dados daquela tabela serão apagados.
$ docker exec -it salic-mssql bash
# cd migrate
# ./main migrate nomedomodulo
# ./main flush nomedomodulo