Skip to content

[Claude] Histórico de consultas executadas: Query History - #15

Open
leoars wants to merge 1 commit into
mainfrom
pgms-043-query-history
Open

leoars wants to merge 1 commit into
mainfrom
pgms-043-query-history

Conversation

@leoars

@leoars leoars commented Nov 11, 2026

Copy link
Copy Markdown
Owner

What changed / O que mudou

Query History (PGMS-043, build M1060 da fonte de desenvolvimento). Sugestão de um usuário: o histórico do DBeaver faz falta no SSMS e no pgAdmin, desde que não vire ruído de SELECT 1.

  • Gravação depois de cada execução de uma aba de consulta: F5/Execute em grade, texto ou arquivo, e Execute SQL dentro de Design Query in Editor. Guarda SQL, servidor, porta, banco, usuário, início (UTC), duração, linhas recebidas e afetadas, resultado (sucesso, erro com SQLSTATE e mensagem, cancelada) e origem (Typed, Query Designer, AI, Other). SQL recusado antes do envio não é gravado.
  • Local e criptografado: %LOCALAPPDATA%\PGMS\history, em segmentos comprimidos e protegidos com DPAPI do usuário Windows. A entropia inclui o nome do arquivo, e uma trava entre processos evita perda entre duas instâncias. Nada vai para o servidor. A escrita é assíncrona: nunca atrasa nem faz falhar a consulta; uma falha só aparece na barra de status.
  • Sem ruído: uma linha por consulta distinta (hash SHA-256 do SQL com espaços e quebras colapsados, por servidor, porta e banco), com última execução e contagem, expandindo para cada execução.
  • View ▸ Query History… (Ctrl+Alt+H): filtros por texto, conexão, período e Pinned only; painel com o SQL completo; Open in New Query (reaproveita uma conexão aberta para o mesmo servidor e usuário, troca o banco e não executa), Copy SQL, Pin/Unpin, Delete… e Clear History….
  • Limites em Tools ▸ Options ▸ Query Execution ▸ Query History: liga/desliga, 90 dias, 10.000 execuções e 64 KiB de SQL por execução (texto maior é cortado e marcado). A execução mais recente de uma consulta fixada é mantida.
  • Por perfil: caixa "Do not record query history for this server" no Connect, desmarcada por padrão.
  • Guias do usuário EN/pt-BR (seção Query History, com a nota de privacidade e armazenamento) e notas de versão em "em desenvolvimento".

Why / Por quê

O SSMS 22.11 não tem histórico de consultas nativo. Isso foi conferido antes de codar: os menus e a busca do Tools ▸ Options foram pilotados por UI Automation, e os binários foram analisados. O único "SQL History" visto é de um add-in de terceiros.

Validation actually run / Validação realmente executada

Nesta branch, no PostgreSQL 17.11, em cluster isolado em loopback:

  • Test-Integration.ps1 -QueryHistoryOnly (recorte novo): 76 WPF. Cobre:
    • armazenamento: DPAPI, nenhum texto claro no disco, deduplicação, corte, arquivos adulterados, renomeados, de versão desconhecida e grandes demais recusados e mantidos, retenção por número e por idade, escritores concorrentes;
    • gravação real a partir de uma aba: sucesso, erro 42P01, DML, cancelamento, Results to Text, origens, consulta concluída com o histórico travado por outro processo, falha de disco sem afetar a consulta;
    • janela, Options e Connect.
  • Test-Integration.ps1 -ConnectionOnly: 69 WPF (por causa da caixa nova no Connect).
  • Test-PublicDocumentation.ps1: válido.

Na fonte de desenvolvimento, com o mesmo código, a regressão completa no PG 17.11 deu 2.954 de integração + 4.495 WPF = 7.449. Detalhes das rodadas:

  • A primeira rodada WPF pegou um teste antigo do Connect: a caixa nova trazia 4 px de rolagem. As margens foram ajustadas.
  • Duas rodadas seguintes tropeçaram, de forma intermitente, em testes de diagramas e do View Designer, que não foram alterados e passaram isolados.
  • A quarta rodada passou inteira.

Não executado:

  • regressão completa nesta branch;
  • PostgreSQL 16 e 18;
  • teste com um segundo usuário Windows (a separação entre usuários é garantia do DPAPI);
  • mouse e teclado reais (cliques por evento; Ctrl+Alt+H não pressionado de verdade).

Limites conhecidos:

  • O SQL é guardado como foi escrito, inclusive uma senha digitada em ALTER ROLE … PASSWORD; não há mascaramento.
  • A exclusão por perfil vale para host e porta, não por banco nem por usuário.
  • A retenção por idade é aplicada ao abrir e no máximo de hora em hora. Passando do número máximo, o histórico é reduzido a 95% do limite.

Checklist

  • No credentials, personal data, dumps, saved profiles or local artifacts are included. / Sem credenciais, dados pessoais, dumps, perfis salvos ou artefatos locais.
  • Tests used only synthetic data and the isolated project cluster. / Testes usaram apenas dados sintéticos e o cluster isolado do projeto.
  • Public documentation updated in both docs/en and docs/pt-BR (and both READMEs) when relevant. / Documentação pública atualizada em docs/en e docs/pt-BR (e nos dois READMEs) quando pertinente.
  • No SSMS parity or platform certification is claimed beyond what was tested. / Nenhuma paridade com SSMS ou certificação de plataforma declarada além do testado.
  • Known limits of the change are stated above. / Limites conhecidos da mudança estão descritos acima e em docs/en/release-notes.md.

🤖 Generated with Claude Code

Toda execução das abas de consulta fica gravada neste computador,
criptografada com DPAPI para o usuário Windows e nunca no servidor.
View > Query History... (Ctrl+Alt+H) agrupa por consulta distinta, com
filtros, Pin, Delete, Copy SQL e reabrir em aba sem executar. Retenção
em Tools > Options > Query Execution > Query History e opção por perfil
para não gravar um servidor.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant