Erro ao criar o JSON
Closed this issue · 6 comments
Olá, primeiramente parabéns pelo projeto!
Já usei várias vezes para baixar a base, mas após as últimas alterações está dando esse erro:
`Creating the JSON data for each CNPJ 0% | | (0/60267819, 0 it/hr) [0s:0s]panic: send on closed channel
goroutine 90099308 [running]:
github.com/cuducos/minha-receita/transform.(*venuesTask).produceRows.func1(0xc001cffd40, 0xc01b25c000?)
/srv/minha-receita/transform/venues.go:74 +0x72
created by github.com/cuducos/minha-receita/transform.(*venuesTask).produceRows
/srv/minha-receita/transform/venues.go:56 +0x3b
panic: send on closed channel
goroutine 90099306 [running]:
github.com/cuducos/minha-receita/transform.(*venuesTask).produceRows.func1(0xc001cffd40, 0xc01b25c000?)
/srv/minha-receita/transform/venues.go:74 +0x72
created by github.com/cuducos/minha-receita/transform.(*venuesTask).produceRows
/srv/minha-receita/transform/venues.go:56 +0x3b`
comando utilizado:
minha-receita transform --directory /srv/minha-receita/data/
Desculpe esqueci de adicionar mais informações.
Seguem os detalhes:
- updated_at.txt => 2024-04-13
- Go go1.22.2 linux/amd64
- PostgreSQL 16 - localhost
- AlmaLinux (64-bit)
- 4 CPU / 16 GB / 1 TB SSD
- Está rodando diretamente da máquina virtual (sem docker).
Comandos executados:
minha-receita download --directory /srv/minha-receita/data/
minha-receita transform --directory /srv/minha-receita/data/
Obs.: O banco de dados já está populado e estou tentado atualizar as informações, por isso não estou rodando com o --clean-up
O banco de dados já está populado e estou tentado atualizar as informações
Você não vai conseguir.
A coluna id
tem que ser única, então vai dar conflito quando ele tenta escrever no PostgreSQL um CNPJ que já existe.
O melhor é exlcuir a base de dados e começar do zero.
A opção --clean-up
do comando transform
faz isso automaticamente para você, se quiser.
Acho que seria interessante verificar se já existe e se existir substituir a informação, pois no meu caso o banco de dados não pode ficar "vazio" enquanto é feita a atualização das informações.
Mas muito obrigado. Vou rodar aqui para atualizar utilizando o clean-up.
Acho que seria interessante verificar se já existe e se existir substituir a informação
Computacionalmente falando, um “upsert” é muito mais caro do que o carregamento em lote.
Isso faria o processo do ETL saltar de 2h para dias.
Não é uma opção.
no meu caso o banco de dados não pode ficar "vazio" enquanto é feita a atualização das informações.
No meu também não.
Por isso para “atualizar” uso os passos descritos em #142
Resumo:
- criar novo banco de dados
- subir dados novos para novo banco de dados
- mudar a aplicação para ler do novo banco de dados
- jogar no lixo o banco de dados antigo
0% de downtime ; )