A conexão
Uma conexão é um arquivo .lnc (LightNote Connection) no próprio
espaço — versionável no Git e portável entre máquinas. As conexões da
pasta aparecem no painel Conexões da barra lateral (o ícone de banco de
dados), cada uma com um ponto de status (verde conectada, cinza desconectada,
vermelho com erro) e, embaixo dela, os scripts que pertencem a ela. Crie uma
por Novo → Nova conexão BD ou pelo botão do painel; abrir um .lnc
pela árvore de arquivos também leva ao painel. Abaixo da lista fica a árvore de
objetos da conexão selecionada. O menu de contexto da conexão traz
Conectar/Desconectar, Novo script, Console SQL e
Editar conexão.
Pasta sem conexão: o painel Conexões vazio oferece Nova conexão…
e Abrir um arquivo de banco…, e lista os bancos SQLite e DuckDB em arquivo que já estão
na pasta, cada um com um Conectar. O banco é reconhecido pelo conteúdo do arquivo, não
pela extensão (um .db pode ser de qualquer um dos dois); um clique cria a conexão
(.lnc) ao lado do arquivo, apontando-o pelo nome — os dois viajam juntos — e já
conecta.
Scripts: um script é um arquivo .sql comum e abre na
aba de código, como qualquer arquivo — com histórico, faixa de alterações e
Salvar versão. No começo da barra da aba ficam o seletor de conexão e o
botão Executar; os resultados aparecem embaixo do editor na primeira
execução (ou ao lado: Executar → Resultados ao lado). A conexão de
origem do script fica gravada no .lnc, e ao reabrir o script ele
já vem apontado para ela. Escolher outra conexão no seletor vale só para aquela
aba; para trocar a origem, use Usar sempre "…" para este script. Um script
sem origem abre em Sem conexão, mesmo que a pasta tenha uma conexão só:
nenhum script abre apontado para um banco que você não escolheu. O Console
SQL é uma aba sem arquivo, já ligada à conexão. A Área de análise de um
resultado fica gravada ao lado do script (consulta.sql.analise.json),
uma por consulta: o arquivo guarda os gráficos, as tabelas dinâmicas e o SQL de
cada uma — nunca os dados.
Uma sessão por aba: cada aba de script abre a própria sessão com o
banco — uma consulta longa numa aba não trava as outras nem a árvore de objetos, e
o Commit de uma aba não confirma o que outra fez. Tabelas temporárias e
comandos SET valem só na aba em que foram executados. Se o servidor
limita o número de conexões, desmarque Uma sessão por aba em Editar
conexão. SQLite e DuckDB em arquivo compartilham sempre a mesma sessão (no
SQLite, uma escrita trava o arquivo inteiro). O painel mostra quantas sessões cada
conexão tem abertas.
Drivers: SQLite e DuckDB (arquivo) nativos; PostgreSQL, MySQL/MariaDB,
SQL Server e genérico via ODBC; Oracle nativo (sem ODBC). O
SQL Server usa o driver msodbcsql da Microsoft (instale-o na máquina) e
oferece Autenticação do Windows ou usuário/senha, além das opções de
criptografia do canal (Encrypt / confiar no certificado). Para o Oracle,
informe a pasta do Oracle Instant Client em Configurações → Banco de Dados — ele é carregado em tempo de execução, sem precisar instalar nada. A
conexão Oracle tem quatro modos: Service Name (host/porta/serviço),
SID (host/porta/SID), Nome TNS (alias do tnsnames.ora na
pasta do client) e Descritor TNS completo (colado num campo de texto).
Senha: marque Armazenar senha para cifrá-la dentro do próprio
.lnc (cripto portável, abre em outra máquina); desmarcado, a senha
não é guardada e é perguntada a cada conexão. A cifragem usa uma
Frase-Segura por espaço, definida em
Ajuda → Configurar Frase-Segura; guarde-a, pois sem ela a
senha não pode ser aberta em outro lugar. A Frase fica em cache só na máquina local
(nunca vai para o Git).
Marque Conectar ao abrir para que a conexão se abra sozinha quando você abre um script dela. A conexão automática é silenciosa: se a senha precisar ser digitada (modo perguntar, ou cifrada sem a Frase-Segura em cache na máquina), o script abre desconectado, sem interromper.
Produção sem medo: em Editar conexão, o campo Ambiente diz que banco é
este — Desenvolvimento, Homologação ou Produção —, e a cor dele aparece no seletor
de conexão da aba .sql, numa faixa no topo da aba e num selo no painel Conexões. Numa
conexão de produção, o que altera o banco (INSERT, UPDATE,
DELETE, CREATE, DROP, procedimentos…) mostra antes o que vai rodar
e pede confirmação, com o UPDATE/DELETE sem WHERE em destaque; o
botão padrão é Cancelar, e gravar as alterações da grade pergunta do mesmo jeito. Marque
Somente leitura para a conexão recusar tudo o que altera o banco — no script, na grade e nos dados
de uma tabela — antes de a instrução sair do LightNote: a grade deixa de oferecer edição e, no SQLite, o
arquivo abre só para leitura. O que o LightNote não sabe dizer se só lê (um bloco BEGIN … END,
um DECLARE) conta como escrita.
Túnel SSH: para um banco atrás de um servidor SSH (bastião), escolha em Túnel
SSH uma conexão SSH (.lns) do espaço — a mesma do terminal remoto, com
usuário, chave ou senha cifrada. Host e Porta passam a ser os do banco vistos do servidor SSH
(costuma ser localhost). Ao conectar, o LightNote abre o túnel e liga o banco por ele;
desconectar fecha o túnel. Ele sobe só quando você conecta (nunca ao abrir o arquivo), o
.lns precisa estar dentro do espaço, e opções do ssh que executam comandos
(ProxyCommand, LocalCommand, -F) são recusadas — o -J
vale. Só passam as opções de uma lista de permitidas (-J, -i, -4/-6, -C e -o com chaves de conexão, cifra e autenticação): -A, -R, -I e -E também são recusadas. Uma conexão com túnel não é aberta pela IA (MCP), pelo lnote nem pelos Blocos, que
conectariam direto.
Informações do servidor: ao conectar, o app pergunta ao banco o que ele diz sobre si — a versão, o banco e o schema atuais, o usuário, o tamanho, a codificação, a ordenação e o fuso horário, e se o servidor aceita escrita (uma réplica não aceita). A versão aparece na dica da conexão, e o resto em Informações do servidor…, no menu de contexto da conexão, com um botão para copiar. Um dado que o servidor não informa — versão antiga, falta de privilégio — fica de fora, sem erro. A versão vai junto quando se pede à IA para explicar um erro ou analisar um plano: a sintaxe que ela pode sugerir depende dela.
Chaves estrangeiras no SQLite: o SQLite só faz valer as chaves estrangeiras
declaradas — e o ON DELETE CASCADE — quando a conexão pede, e as conexões do app pedem:
apagar uma linha que outras referenciam, ou inserir uma referência a um registro que não existe, é
recusado, e o CASCADE apaga os filhos como o esquema diz. A caixa Verificar as chaves
estrangeiras, em Editar conexão…, desliga isso — só para uma carga em massa fora de ordem.
Ligar não confere o que já está no arquivo: Informações do servidor… conta, por tabela, as
referências quebradas que já existem (linhas que apontam para um registro que não existe),
gravadas por uma ferramenta que não verificava.
Executar e ver o resultado
Executar: Ctrl+Enter roda a instrução sob o cursor e Alt+X
roda o script inteiro; os resultados aparecem paginados, cada um numa aba
Resultado com uma barra de ações no rodapé: Buscar próximo bloco, Congelar o resultado, Count total, trocar o Limite de linhas,
Atualizar (re-executa), Ver/Copiar SQL, Exportar... e
Gerar SQL a partir da linha selecionada. Um NULL é mostrado em itálico
esmaecido, distinto de um texto vazio, e os números ficam alinhados à direita; ao
selecionar várias células, o rodapé mostra a contagem da seleção e, quando
são numéricas, a soma e a média. O que é uma instrução sai do próprio texto: um bloco BEGIN … END e um corpo $$ … $$ ficam inteiros, e uma linha sozinha com / (Oracle) ou GO (SQL Server) também separa.
Escrever SQL com ajuda: Ctrl+Espaço completa pelo contexto:
depois de FROM, JOIN, UPDATE ou INTO
vêm as tabelas do banco (a lista abre sozinha ao digitar o espaço), e depois de
apelido. vêm as colunas daquela tabela (abre sozinha ao digitar o ponto) —
mesmo antes de o FROM estar escrito, e sem expandir nada na árvore: o
LightNote lê o catálogo do banco em segundo plano, e as colunas só quando o texto chega
a elas. Num script com várias instruções, a que o Ctrl+Enter vai executar fica
destacada. Quando uma instrução falha, ela fica marcada no editor, o nome que o banco
apontou (a tabela ou a coluna que não existe, o ponto do erro de sintaxe) ganha um
sublinhado ondulado, o cursor vai até lá e a mensagem aparece ao parar o mouse em cima.
Ctrl+clique ou F12 no nome de uma tabela abre os dados dela; F4, as
propriedades. Formatar (Shift+Alt+F) arruma o SQL sem ferramenta
instalada: uma cláusula por linha, os itens do SELECT um por linha quando
são vários, AND/OR e subconsultas recuados. Ele muda só espaços
e a caixa das palavras-chave, nunca um nome, um texto ou um comentário, e deixa como
estão as instruções que não são consultas (CREATE, blocos
BEGIN … END).
Congelar o resultado: lê o resultado inteiro do banco de uma vez só e o guarda numa tabela local (em disco, se não couber na memória). A partir daí a grade rola sem consultar o banco, a contagem de linhas passa a ser exata (sem precisar de Contar o total), clicar num cabeçalho ordena (de novo inverte; um terceiro clique volta à ordem em que o banco entregou) e a exportação também sai da cópia local. A ordenação pelo cabeçalho vale até 100 mil linhas; acima disso ela é recusada, com o motivo no tooltip do cabeçalho, porque cada página teria de reordenar a cópia inteira e percorrer a grade voltaria a levar minutos. Um resultado que já veio inteiro na primeira página ordena sem precisar congelar: as linhas já estão em memória. O que não se ordena é a primeira parte de um resultado ainda paginado — o cabeçalho estaria afirmando uma ordem que vale só para o que está na tela.
O gráfico e a tabela dinâmica passam a valer sobre o resultado inteiro — inclusive em bancos onde o gráfico não existia. Se o congelamento parar antes do fim (você clicou em Parar ou o teto foi atingido), as linhas continuam locais, mas o gráfico e a tabela dinâmica seguem no servidor: somar sobre parte do resultado daria um número errado — e ordenar a grade ordena apenas as linhas trazidas, não o resultado inteiro.
Atualizar descongela e executa a consulta de novo. Independentemente de congelar, as páginas que já passaram pela grade ficam guardadas localmente: rolar de volta a uma delas não consulta o banco de novo. Só um congelamento roda por vez: com dois resultados abertos, clicar em Congelar o resultado no outro é recusado com o motivo, em vez de interromper o que está em curso — para parar o que roda, use o Parar na aba dele.
Grade de resultados: cada consulta que devolve linhas ganha uma aba com o nome da tabela (o SQL completo fica na dica da aba). Uma execução nova troca essas abas, menos as fixadas — botão direito na aba, Fixar o resultado —, que ficam para comparar; o × fecha um resultado. Ao lado das abas, o resumo da execução diz quantas linhas vieram e quanto levou, ou o erro em vermelho; clicar nele abre as Mensagens. O rodapé repete as linhas e o tempo e, com o resultado ainda pela metade, oferece Buscar próximo bloco e Contar o total. A barra acima da grade agrupa o resto: Atualizar, Congelar, Limite, o menu Análise, Valor, Colunas e Exportar (com Copiar SQL, Ver SQL e Gerar SQL); numa janela estreita os botões perdem o texto antes de sumir. O cabeçalho mostra o tipo de cada coluna (texto, número, data…) e marca com uma chave as colunas da chave da tabela; o mouse parado em cima diz o tipo por extenso. Arrastar o cabeçalho reordena as colunas, e Colunas (ou o botão direito no cabeçalho) oculta, mostra e ajusta a largura ao conteúdo — a escolha sobrevive a Atualizar, ao Limite e à ordenação.
Células: um NULL aparece em itálico esmaecido, distinto de um texto
vazio, e os números ficam alinhados à direita; ao selecionar várias células, o rodapé mostra a
contagem da seleção e, quando são numéricas, a soma e a média. Valor (ou Ver valor no
painel no menu de contexto) abre ao lado o valor completo da célula selecionada, sem
corte, com Formatar para embelezar JSON/XML só na exibição; o botão Registro do
painel troca o valor pela linha inteira transposta — uma coluna por linha, com o nome ao
lado do valor —, que acompanha o cursor (também em Ver o registro inteiro, no menu da
célula). No menu de uma célula, Filtrar por este valor / Excluir este valor
reexecutam a consulta com um WHERE pela célula, e Ir para o registro
referenciado segue a chave estrangeira da coluna e consulta a tabela-pai pelo valor.
Buscar e filtrar na grade: Ctrl+F com o foco na grade vai para o campo
Buscar na grade, que mostra só as linhas que contêm o texto em qualquer coluna — com o foco
no editor, o Ctrl+F continua sendo a busca do SQL. O funil ao lado abre o Filtro
avançado (condições por coluna, com E/OU), e as colunas filtradas ganham um funil no cabeçalho;
clicar numa barra do gráfico, numa célula da tabela dinâmica ou num valor frequente da Qualidade
vira uma seleção, uma etiqueta acima da grade que sai no ×. O rodapé diz quantas linhas
sobraram de quantas. Buscar e filtrar valem sobre o resultado inteiro, numa cópia local: com
um resultado que veio inteiro é imediato; com só a primeira parte, o campo fica cinza com o motivo
— filtrar o que está na tela esconderia o que está na parte seguinte — e Congelar o libera.
Com a busca ou o filtro ativos, o gráfico, a tabela dinâmica e a Qualidade descrevem o mesmo
recorte da grade. Nada disso muda a consulta: para cortar no banco, use Filtrar por este
valor ou escreva o WHERE.
Gráfico e tabela dinâmica: onde a conta é feita. O menu Análise traz o
Gráfico, a Tabela dinâmica, a Qualidade e a Área de análise, e em
Analisar sobre a escolha entre Dados locais e Tabela inteira (no servidor),
marcada na que está valendo. Quando o resultado coube inteiro na primeira página, o padrão
é local: o LightNote agrega sobre o resultado que já está na tela, sem voltar ao banco a
cada ajuste de eixo, de agregado ou de faixa — e, como o motor local é o DuckDB, o gráfico
passa a existir também em Oracle, SQL Server, PostgreSQL e MySQL, onde o SQL dele não roda no
servidor. Quando o resultado veio truncado, a opção local fica indisponível com o
motivo: agregar sobre uma amostra daria um número errado, e avisar do corte não protegeria
ninguém, porque o que se lê num gráfico é a altura da barra. A opção do servidor agrega sobre a
consulta inteira, com uma consulta por ajuste, e fica indisponível enquanto houver busca ou
filtro na grade (o recorte existe só aqui). Colunas numéricas que o banco entrega como texto — o
caso do NUMBER do Oracle — são reconhecidas como números; identificadores com zero à
esquerda, como 01310, continuam texto. Em Oracle, SQL Server, PostgreSQL e MySQL, com o
resultado ainda pela metade, o Gráfico fica cinza com o motivo, e acende quando você congela
o resultado.
Qualidade dos dados do resultado. O item Qualidade do menu Análise abre, ao lado da grade, o mesmo perfil por coluna das tabelas de arquivo. Ele é calculado pelo DuckDB: na cópia local quando o resultado veio inteiro (ou foi congelado), ou no próprio banco quando o banco é DuckDB. Em Oracle, SQL Server, PostgreSQL e nos demais, com o resultado ainda pela metade, o painel diz por que não descreve e oferece Congelar o resultado ali mesmo; se o congelamento parar no teto, ele recomenda restringir a consulta — o perfil de uma parte descreveria outra tabela. Clicar num valor frequente filtra a grade (é uma seleção, como na busca); para cortar no banco, use Filtrar por este valor no menu da célula.
Sobre quanto dado a análise foi feita. Acima do gráfico, da tabela dinâmica, da qualidade e da Área de análise, uma linha diz se a conta usou todos os dados — com o número de linhas, contado sozinho na cópia local — ou se foi calculada no banco, sobre a consulta inteira; ali a contagem é o link Contar linhas, porque contar executa a consulta de novo. Quando o congelamento parou antes do fim e há busca ou filtro na grade, a análise só pode ser feita sobre o que foi trazido, e a linha diz Parte dos dados, com o tom de aviso. A mesma frase vai na legenda do relatório da Área de análise.
Instantâneo dos dados: a análise de um script salvo guarda os cartões ao lado dele, e não os dados — para vê-la de novo é preciso o banco. O botão Instantâneo dos dados da Área de análise grava o resultado inteiro num arquivo Parquet ao lado do script, junto com os cartões; abrir esse arquivo mostra a mesma análise sem conexão, sobre os dados daquele instante. É um gesto explícito e a janela avisa antes: o arquivo é uma cópia dos dados do banco, e vai junto se a pasta for para o Git ou for compartilhada. Só existe com o resultado inteiro aqui — com só a primeira parte, congele antes (a dica do botão diz isso).
Plano de execução: o item Plano de execução do menu do
Executar pede o plano da instrução sob o cursor (SQLite, DuckDB, PostgreSQL e MySQL) e o
mostra na aba Plano: a árvore dos passos, com o que mais pesa em destaque e uma frase
dizendo o que ele significa — no PostgreSQL e no MySQL, o passo de maior custo próprio (o
custo dele menos o dos passos de dentro), com a fatia do total; no DuckDB, o que mais produz
linhas; no SQLite, que não informa custo, a leitura de uma tabela inteira. Quando o passo lê a
tabela inteira num banco que tem índice, a frase lembra que um índice na coluna do filtro costuma
evitar isso (no DuckDB, colunar, ler a tabela inteira é o normal, e o conselho não aparece). O
apelido da consulta (FROM pedidos p) é trocado pelo nome da tabela. Ver como
texto mostra a mesma árvore recuada, e Copiar o plano a copia. Os números são a
estimativa do planejador: a consulta não é executada. Um EXPLAIN digitado também
abre na aba Plano quando o LightNote reconhece a resposta; o que ele não reconhece continua na
grade. Nos bancos que não expõem o plano numa única instrução (SQL Server, Oracle) o item fica
desabilitado, com o motivo na dica.
Analisar com a IA: o destaque diz qual passo pesa; o botão
Analisar com a IA da aba Plano pergunta por que o planejador o escolheu e o que
mudar. Vão a consulta, o plano e o esquema das tabelas que ele lê — com os índices que já existem,
para a IA não sugerir criar um que já está lá. Os valores saem antes do envio (o texto
entre aspas e os números viram ?; o comentário sai inteiro), e Ver o que será
enviado mostra exatamente o que vai. A sugestão abre no editor como script novo, e nada é
executado.
O esquema
Dados de uma tabela: dê um duplo clique numa tabela na árvore
para abrir a aba dela na sub-aba Dados. Acima da grade ficam dois campos,
WHERE e ORDER BY, aplicados com Enter — e os dois
vão ao banco, então valem para a tabela inteira, não só para as linhas que
estão na tela. Clicar no cabeçalho de uma coluna também ordena no banco (crescente,
decrescente, sem ordem) e preenche o ORDER BY; Filtrar por este
valor no menu de uma célula acrescenta a condição ao WHERE, à
vista e editável. A aba tem a sua própria sessão com o banco, como uma aba de
script. Abrir a tabela pelas Propriedades não consulta os dados: a consulta
só roda quando a sub-aba Dados é mostrada. Com o ORDER BY vazio, as linhas vêm na ordem da chave primária (o campo mostra qual): sem ordem nenhuma, o banco não garante a mesma sequência entre uma página e a seguinte, e rolar podia repetir ou pular linhas. Ordenando pelo cabeçalho, a chave desempata as linhas de valor igual.
Editar os dados: na grade de uma tabela que tem chave primária (ou única, de colunas NOT NULL), dê um duplo clique numa célula, aperte F2 ou comece a digitar. O editor é o do tipo da coluna: data com calendário, verdadeiro/falso numa lista, número que só aceita número, e JSON conferido ao confirmar. Texto apagado vira texto vazio, e não NULL: o NULL é um gesto próprio (Definir como NULL no menu da célula, ou o botão NULL do painel de valor, que também edita textos longos). Insert acrescenta uma linha nova — o que ficar como padrão recebe o valor padrão do banco —, Duplicar linha copia a selecionada menos a chave, e Del marca as linhas para exclusão (de novo, desmarca). Nada disso vai ao banco na hora: as alterações ficam pendentes, pintadas na grade (âmbar a alterada, verde a nova, vermelho riscado a excluída), e uma faixa acima dela conta quantas são. Revisar… mostra o SQL que será executado e o copia como script; Salvar grava tudo numa transação só, conferindo que cada UPDATE e DELETE alcança exatamente uma linha — se a linha foi alterada ou excluída por outra sessão depois de lida, ou se alguma instrução falha, nada é gravado e as alterações continuam na grade; Descartar desfaz todas. Recarregar a grade, trocar o filtro ou fechar a aba com alterações pendentes pergunta antes.
Quando a grade não edita, ela diz por quê — na dica dos botões e
numa faixa ao tentar editar. Tabela sem chave primária nem única de colunas NOT NULL
fica somente leitura: sem a chave, não há como saber que linha cada edição
alteraria. Numa aba de script, o resultado também se edita quando a consulta é um
SELECT de uma tabela só que lista colunas dela (ou usa
SELECT *) e traz a chave; junção, subconsulta, coluna calculada ou
renomeada, DISTINCT, GROUP BY e UNION deixam o
resultado somente leitura. Colunas binárias não se editam pela grade. E com uma
transação aberta na aba (autocommit desligado) com instruções pendentes, confirme ou
desfaça antes de salvar: gravar a grade as levaria junto.
Propriedades do objeto: F4 numa tabela da árvore (ou Propriedades no menu de contexto) abre a aba dela direto na estrutura; ao lado de Dados ficam quatro sub-abas: Colunas (nº, nome, tipo, se aceita
nulo, valor padrão e um ícone de chave nas colunas da chave primária),
Chaves (chaves primárias, estrangeiras, únicas e checks; um duplo
clique numa chave estrangeira abre a tabela referenciada), Índices e
DDL — o CREATE TABLE do objeto, para copiar, salvar como
.sql ou abrir numa aba editável. Quando o banco não fornece o DDL
pronto (PostgreSQL e SQL Server não têm esse comando) — ou quando o comando de DDL
é negado por falta de permissão —, o LightNote o reconstrói a partir dos
metadados e diz isso claramente na aba. Se nem o catálogo de colunas puder ser
lido (sem permissão ou catálogo indisponível), não há do que reconstruir: a aba
avisa em vez de ficar silenciosamente vazia. O menu de contexto da tabela também
traz Copiar DDL sem abrir a aba.
Árvore de objetos: no painel Conexões, abaixo da lista,
a árvore da conexão selecionada separa Tabelas de Views (cada uma com
seu ícone) e marca com um ícone de chave as colunas que fazem parte da chave
primária. A árvore mostra também Procedimentos e funções, Gatilhos e Sequências (onde o banco os tem); um duplo clique num procedimento, função ou gatilho abre o código-fonte num console SQL da conexão. Ao lado de cada tabela aparece o número aproximado de linhas, e na dica o comentário dela — é a estimativa que o banco guarda, não um COUNT(*). Os schemas do sistema (SYS, pg_catalog…) ficam ocultos; o item no fim da lista os mostra. A caixa de filtro peneira na hora o que já foi carregado e, a partir de 2 letras, procura também no banco: o que ninguém expandiu aparece na pasta No banco do topo. Dentro de um script, Ctrl+Alt+O (Ir para tabela…, no seletor de conexão) abre a busca pelo teclado, e F12 sobre o nome de uma tabela abre a aba dela.
Atualizar metadados. Depois de um CREATE, ALTER, DROP ou RENAME executado num script, a árvore, o completar e as propriedades da tabela releem tabelas, colunas e tipos sozinhos, poucos segundos depois — sem fechar o que estava aberto na árvore. Com o autocommit desligado, a releitura espera o Commit (ou o Rollback), porque antes disso a mudança ainda não existe para as outras sessões. Quando a estrutura mudou por fora (outro programa, uma migração), use o botão Atualizar metadados na barra do script, no menu da conexão, ao lado do filtro da árvore ou o Atualizar das propriedades da tabela.
Explorar o esquema: clique
com o botão direito numa tabela para Propriedades, Copiar DDL,
Inserir SELECT no editor,
Visualizar dados, Contar linhas, Copiar nome qualificado ou
abrir o submenu Gerar SQL → INSERT/UPDATE/MERGE: uma tela lista as
colunas da tabela para você marcar Incluir e Chave, mostra um preview
ao vivo e joga o comando no editor (o MERGE sai em ANSI; se o driver não suportar,
um aviso aparece). Direto na grade de resultados, o botão Gerar SQL do rodapé
cria INSERT/UPDATE/DELETE já preenchido com os valores da linha
selecionada (disponível quando a consulta é um SELECT de uma única
tabela). Os nomes de tabelas e colunas que você navega na árvore também
passam a aparecer no autocomplete (Ctrl+Espaço) dos editores
.sql da conexão, sem consultas extras ao banco.
Diagrama ER: no menu de contexto da pasta Tabelas, Diagrama ER das
tabelas desenha todas elas; no de uma tabela, Diagrama ER (esta tabela e as que ela
referencia) desenha ela e as que as chaves estrangeiras dela apontam. O resultado é uma nota
em Dicionário de Dados com uma cerca mermaid erDiagram — colunas
com tipo, PK/FK, e cada chave estrangeira como relação (opcional quando a coluna
aceita NULL, um-para-um quando a chave é a própria chave primária). É texto na nota: versiona no
Git e se edita como qualquer diagrama. Acima de 40 tabelas as demais ficam de fora, e a nota diz
quantas.
Importar um arquivo para uma tabela: Importar arquivo para uma
tabela… (no menu da conexão e no da pasta Tabelas) e Importar arquivo para esta
tabela… (no de uma tabela) levam um CSV, TSV ou planilha do Excel para o banco — o caminho de
volta do Exportar resultado. A janela mostra a prévia com o tipo lido de cada coluna: um
tipo só vale se todas as células casarem (inteiro sem zero à esquerda — 01310
é código e fica texto —, decimal com ponto ou com vírgula, data ISO, verdadeiro/falso); a data
dd/mm/aaaa fica texto, porque o mês pode vir antes. Célula vazia vira NULL. O
separador é farejado como na tela de tabela. Criar a tabela usa o nome do arquivo;
Acrescentar à tabela confere antes se as colunas do arquivo existem nela. Tudo vai numa
transação só: falhou uma linha, nada fica — e a tabela criada nesta importação é apagada.
As travas valem aqui também: a conexão somente leitura recusa, e a de produção pergunta antes. Numa
conexão DuckDB o CSV é lido direto pelo banco, sem teto de linhas; nas outras, o teto é de 100 mil
linhas.
Exportar, variáveis e transações
Exportar resultado: clique com o botão direito na grade de resultados e
escolha Exportar resultado... para gravar em CSV (delimitador,
caractere de quote, quotar sempre, linha de cabeçalho, texto para NULL),
JSON Lines ou SQL (comandos INSERT com nome de tabela), com
limite de linhas opcional. A exportação percorre a consulta inteira em
streaming (re-busca paginada), não só o que está visível na tela.
Resultado na nota do dia: no menu Exportar da grade, Adicionar à
nota do dia leva a tabela como ela está na tela — as colunas visíveis, na ordem da grade, com
o recorte da busca e do filtro — e, logo abaixo, a consulta numa cerca sql: a
nota guarda de onde o número saiu. O NULL aparece como NULL, os números ficam
alinhados à direita, e uma linha em itálico diz quando a tabela não é o resultado inteiro (as
primeiras 200 linhas, ou só as que já foram carregadas).
Variáveis de script: use @set nome = valor numa
linha do script para definir uma variável — o prefixo @ a mantém fora
do banco (não colide com o SET real de Postgres/DuckDB/SQL Server).
Referências :nome são substituídas antes de executar (fora de strings
e comentários; o cast ::tipo e binds como :1 ficam
intactos); um :nome sem valor abre um prompt antes de rodar. O item
Variáveis… do menu do Executar abre a tela das variáveis já definidas
(editar/adicionar/remover).
Parâmetros: ao executar uma instrução com :nome — ou com
?, ?1, ?2, exceto no PostgreSQL, onde o
? é operador do JSON —, a janela Parâmetros da consulta mostra a
instrução e todos os parâmetros dela já preenchidos com o último valor usado, e a lista de
cada um guarda os valores anteriores: repetir com outro valor é trocar um campo. O valor
entra no SQL como está, então texto vai entre aspas simples ('abc'). O que o
script define com @set não é perguntado. Desmarque Perguntar a cada
execução para a aba usar os últimos valores sem perguntar; para trocá-los depois, use
Variáveis….
Histórico de consultas: o item Histórico… do menu do
Executar abre uma janela com as últimas instruções executadas com sucesso
nesta conexão, em colunas SQL / Quando / Duração / Linhas. Selecione uma
para Re-executar, Inserir no editor ou Copiar (duplo-clique
insere), ou use Limpar histórico. Ele fica guardado só na máquina
local (não vai para o Git nem para o .lnc).
Histórico de todas as conexões: na janela do histórico, marque Todas as conexões para ver as consultas de todos os bancos, da mais recente à mais antiga, com a coluna da conexão, e procurar em todas pelo campo de filtro. Re-executar vale só para as consultas desta conexão; as de outra se inserem no editor, para você rodá-las no banco certo.
Transações: a opção Autocommit (ligada por padrão) fica no menu do Executar. Com ela desligada, as alterações ficam pendentes até você confirmar (Commit) ou descartar (Rollback), e a barra da aba mostra Transação · N pendentes, com os dois comandos. Fechar a aba, trocar de conexão ou desconectar com uma transação aberta pergunta o que fazer.
Índice
Edição
- Visão geral
- Primeiros passos
- Espaço e janelas
- Painel Atividades: tarefas e mensagens
- Editor de código
- Markdown e wikilinks
- Diagramas (Mermaid)
- Matemática e química (LaTeX)
- Calendário na nota
- Numeração e referência cruzada
- Citações e referências
- Norma do trabalho acadêmico
- Grafo de conexões
- Tabelas (Parquet, CSV, JSON, Excel)
- Área de análise: tabela dinâmica e vários gráficos
- PDF e imagens
- Imagens: marcar um print
- Páginas HTML (.html)
- Imprimir
- Zip como pasta (.zip)
- Blocos (.lnb)
- Tarefas (Kanban / Gantt)
- Tabela personalizada (.lnd)
- Bases (consultas salvas sobre as notas)
Ferramentas
- Busca em arquivos e Pendências
- Versionamento (Git fácil)
- Snapshots e backup
- Revisar mudanças (checkpoints)
- Comparar arquivos (diff)
- Executar código (F5)
- Terminal e CLIs de IA
- Assistente de IA na seleção (Ctrl+K / Ctrl+I)
- IA no seu computador
- Sessões de IA
- Chat com IA
- Testar API HTTP (.lnh)
- Banco de dados (.lnc)
- Conexão SSH (.lns)
- Segurança: Frase-Segura, PIN e Markdown Seguro
- Notas diárias, captura rápida e bandeja
- Reencontrar notas antigas
- Suas notas no celular
- Gravar áudio (voz, reunião) com transcrição por IA
- Notas autoadesivas
- Calendário
- Paleta de comandos
Automação (IA / scripts)
Referência