cuducos / minha-receita

🏢 Sua API web para consulta de informações do CNPJ da Receita Federal
https://minhareceita.org
MIT License
1.32k stars 133 forks source link

PostgresSQL some após powerdown #231

Closed mbkcontabilidade closed 3 months ago

mbkcontabilidade commented 3 months ago

Recentemente tivemos um powerdown inesperado, luz acabou e a ups nao durou o tempo que ficamos sem luz. Ao reiniciar o servidor proxmox onde o minha-receita esta instalado em uma lxc ubuntu, o tamanho de 120GB havia caido para 10GB e ao iniciar o container postgres nenhua informacao estava la.

O que poderia ter causado isso, e como impedir que aconteca novamente?

Estou dando um transform nesse exato momento, algumas horas ate estar online novamente para fazer algum teste.

mbkcontabilidade commented 3 months ago

Eu vi o problema #204, mas nao encontrei solução no local.

mbkcontabilidade commented 3 months ago

Alterei alguns parametros do postgres:

ALTER SYSTEM SET fsync = 'on'; ALTER SYSTEM SET full_page_writes = 'on'; SELECT pg_reload_conf();

Nao vou testar hoje porque preciso da base de dados para amanha, mas durante o final de semana vou desligar e religar o servico, ver se deu certo.

cuducos commented 3 months ago

Você pode confirmar se a versão que você está rodando inclui as alterações do #226? Teoricamente, esse PR corrigiria esse problema.

mbkcontabilidade commented 3 months ago

Nao havia visto isso, perdão. Acredito que não, vou criar uma segunda base de dados usando a nova versao para testar.

mbkcontabilidade commented 3 months ago

Após alguns testes, parece estar estavel, simulei powerdown diretamente no proxmox e nao perdeu a database. Obrigado!

Segue abaixo um script caso alguem tenha interesse em criar indexes para a database:

!/usr/bin/env python

import psycopg2

Informações de conexão

connection_info = { 'user': 'minhareceita', #substitua pelo usuario da sua dabatase 'password': 'minhareceita', #substitua pela senha da sua database 'database': 'minhareceita', #substitua pelo nome da sua database 'host': '192.168.0.105', # substitua pelo IP ou hostname do seu container Docker 'port': '5432' #ou a porta onde seu postgres esta publicado }

Comandos para criar índices

index_commands = [ "CREATE INDEX cnpj_municipio_idx ON cnpj((json->>'municipio'));", "CREATE INDEX cnpj_cnae_fiscal_idx ON cnpj((json->>'cnae_fiscal'));", "CREATE INDEX cnpj_descricao_situacao_cadastral_idx ON cnpj((json->>'descricao_situacao_cadastral'));", "CREATE INDEX cnpj_cnpj_idx ON cnpj((json->>'cnpj'));", "CREATE INDEX cnpj_razao_social_idx ON cnpj((json->>'razao_social'));", "CREATE INDEX cnpj_cep_idx ON cnpj((json->>'cep'));" ]

try: print('Conectando ao banco de dados...') connection = psycopg2.connect(**connection_info) print(f'Conectado ao banco {connection_info["database"]} com o usuário {connection_info["user"]}') cursor = connection.cursor()

for command in index_commands:
    print(f'Executando: {command}')
    cursor.execute(command)
    connection.commit()
    print('Índice criado com sucesso.')

except (psycopg2.OperationalError) as error: print('Erro ao conectar no PostgreSQL:', error) finally: if connection: cursor.close() connection.close() print('Conexão fechada.')

Esse script em questao acelerou tremendamente o lookup, reduzindo em 60% em comparação para encontrar, por exemplo, 10.000 CNPJ's de uma cidade e cnae especificos e em estado ATIVO.

Boa noite,