Ir para o conteúdo

Banco de Dados

SGDG

Postgres 12.7

Ambientes e Servidores

Desenvolvimento

  • Ambiente: CD/IAC Desenv (pode ser acessado da máquina)
  • IP: 10.139.74.251
  • Porta: 5432
  • Bancos: serprobots, publisher, kestra_d, batch
  • Usuário: postgres
  • Senha: disponivel no estaleiro variavel "POSTGRES_PASSWORD"

Homologação

  • Ambiente: CD/IAC Desenv (pode ser acessado da máquina)
  • IP: 10.139.75.195
  • Porta: 5432
  • Bancos: serprobots, kestra_h, batch
  • Usuário: postgres
  • Senha: disponivel no estaleiro variavel "POSTGRES_PASSWORD"

Produção

  • Ambiente: CD/IAC Prod (não acessível)
  • IP: 10.193.10.44
  • Porta: 5432
  • Bancos: dbpro_11537_serprobots, kestra, batch
  • Usuário: usr_serprobots_pro

Schemas

O Serprobots precisa de três bancos, um que contém o modelo de dados da própria plataforma (serprobots), outro usado pelo Spring Batch para manter dados sobre os jobs (batch) e outro para suportar o kestra (kestra).

O SQL do schema serprobots fica versionado no projeto Migrations. Foi criado um módulo no Estaleiro que roda o código desse projeto na inicialização, atualizando o banco de dados daquele ambiente com as mudanças daquela release.

Modelo de Dados

O modelo mais atual pode ser gerado conectando-se no banco de Desenvolvimento com a ferramenta DB Visualizer.

Modelo gerado em 13/01/2026: Serprobots

Como configurar postgres no IAC

  1. Após criar máquina no IAC, accessar a máquina via ssh: CPF@IP_DA_MAQUINNA, senha definida no rundeck

  2. Mudar para o usuário postgres: sudo su - postgres

  3. Acessar o psql como postgres: psql postgres postgres

  4. Mudar senha do postgres: \password postgres

  5. Alterar o pg_hba.conf para aceitar conexões remotas: /opt/dbfiles/postgres/12/<SEU SISTEMA>/data/pg_hba.conf mudando a regra do IPv4 para o ADDRESS 0.0.0.0/0 e METHOD md5, conforme exemplo abaixo:

    Exemplo de pg_hba.conf

    https://stackoverflow.com/questions/3278379/how-to-configure-postgresql-to-accept-all-incoming-connections

  6. Recarregar o pg_hba.conf voltando no psql e rodando o comando: SELECT pg_reload_conf();

  7. Conectar no banco pelo IP com o pgAdmin4 (ou outro cliente) e criar os bancos necessários

  8. Criar Regra de Saída no estaleiro para o IP da máquina na porta 5432 (Postgres)

SQL úteis

Informações sobre publicações ativas de um chatbot

select et.*, s.* from deploys d
inner join environments e on d.environment_id = e.id
inner join environment_types et on e.type_id = et.id
inner join chatbots c on e.chatbot_id = c.id
inner join stacks s on d.stack_id = s.id
where c.mnemonic = 'bot-rodrigo'
and d.active = true

Emails dos usuários de um determinado CNPJ (para envio de comunicação):

select c."name" as "Chatbot", u."name" as "Nome", email as "Email", username as "CPF", department as "Departamento"
from users u
inner join user_roles ur on ur.user_id = u.id
inner join groups g on ur.group_id = g.id
inner join chatbots c on c.group_id = g.id
where billing_cnpj = '33683111000107'
order by c."name", u."name";

Ver todos os valores de parâmetros de um determinado componente (motor ou item de configuração) para conseguir fazer apuração especial (pegar o ID do bot inspecionando a requisição no navegador)

select pv.* from parameter_values pv
inner join environment_configurations_parameter_values ecpv on ecpv.parameter_value_id = pv.id
inner join bots_environment_configurations bec on bec.environment_configuration_id = ecpv.environment_configuration_id
inner join bots b on b.id = bec.bot_id
where b.id = 'd8f58e99-006d-459b-b597-16890f258f96';

Listar todos os chatbots que usam o motor GPT e com publicação ativa em produção:

select a.account_name, c.id, c.name, c.mnemonic, et.mnemonic as "ambiente", s.version
from chatbots c
left join accounts a on c.account_id = a.id
left join environments e on e.chatbot_id = c.id
left join environment_types et ON et.id = e.type_id
left join deploys d ON e.current_deploy_id = d.id
left join stacks s ON d.stack_id = s.id
where c.deleted = false
and c.archived = false
and c.id in (
    -- filtra apenas chatbots com as engines releases do GPT
    select f.chatbot_id from flows f    
    where f.master=true 
    and f.id in (
        select flow_id from bots where engine_release_id in ('a563d515-6eed-40af-ade9-c69a82d55544', 'c3890107-fddc-471c-af09-1597d42f219f')
    )
)
and c.id in (
    -- Filtra apenas chatbots publicados em produção
    select e.chatbot_id from environments e
    left join environment_types et on e.type_id = et.id
    left join deploys d on d.environment_id = e.id
    where et.mnemonic = 'p'
    and d.active = true
)
order by account_name, name

Listar todos os chatbots que usam o Motor Serpro LLM Mistral Nemo:

select  distinct(chatbots.name) as chatbot, accounts.account_name as conta, usuarios.emails
from engine_releases 
    inner join stacks_engine_releases ON stacks_engine_releases.engine_release_id = engine_releases.id 
    inner join bots ON bots.engine_release_id = engine_releases.id
    inner join flows ON flows.id = bots.flow_id
    inner join chatbots ON chatbots.id = flows.chatbot_id
    inner join accounts ON accounts.id = chatbots.account_id
    inner join groups ON chatbots.group_id = groups.id
    inner join (
        select groups.id as group_id, string_agg(users.email, ', ') as emails
        from users 
        inner join user_roles on users.id = user_roles.user_id 
        inner join groups on groups.id = user_roles.group_id
        group by groups.id
    ) as usuarios on usuarios.group_id = groups.id
where 
    engine_releases.id = 'b62818df-17c2-46bc-a022-13d93a4208e8' AND
    chatbots.deleted is false
order by (accounts.account_name)