Skip to content

Proteções ​

Eu gosto de você. E dos seus dados. Vamos conferir antes de fazer isso.

Antes de uma escrita rodar ​

Quando você roda uma escrita pelo editor de queries, o Lily olha antes.

  1. Conexões somente leitura recusam (veja abaixo).
  2. Os parâmetros são preenchidos.
  3. Impacto. Para um único INSERT, UPDATE, DELETE, TRUNCATE ou DROP, o Lily estima o que ele vai tocar, sem rodar, e mostra numa janela de confirmação com até 20 das linhas afetadas.

O que a estimativa mostra ​

ComandoComo o Lily conta
UPDATE / DELETE … WHERESELECT count(*) com o seu WHERE (exato)
UPDATE / DELETE sem WHERE, TRUNCATE, DROPO tamanho da tabela (aproximado, marcado com ~)
INSERT … VALUESAs linhas do comando
INSERT … SELECTcount(*) do SELECT (aproximado)

Ela também lista as tabelas cujas chaves estrangeiras apontam para a que você está mudando. Se a estimativa falha, ela avisa e mostra o tamanho da tabela em vez de um zero; uma estimativa que falhou nunca impede você de rodar.

O Lily não estima comandos com join (UPDATE … FROM, DELETE … USING, delete em várias tabelas) nem scripts com vários comandos; esses recebem os avisos abaixo, sem número.

Avisos e confirmação digitada ​

A janela lista o que tem de arriscado:

  • UPDATE ou DELETE sem WHERE (afeta todas as linhas);
  • TRUNCATE e DROP;
  • qualquer escrita numa conexão de Produção, inclusive CREATE, ALTER e GRANT;
  • em Produção, SQL que o Lily não consegue ler com segurança (comentários /*! */ do MySQL, comentários com #, strings sem fechar), marcado para revisão manual.

Em TRUNCATE, DROP, e UPDATE ou DELETE que pegam todas as linhas da tabela, você precisa digitar o nome da tabela para liberar o Executar. Nos outros casos, Executar mesmo assim segue.

Conexões de produção ​

Marque uma conexão como Produção nas regras da casa e:

  • toda escrita pelo editor de queries pergunta antes, até um CREATE INDEX;
  • os dashboards esperam você antes de rodar e param cada tile depois de 30 segundos;
  • o formulário da conexão sugere deixar somente leitura.

Outras ferramentas que mudam dados (Aplicar e provar no Investigar e no Acelerar, mover e migrar dados, células de notebook, matar uma sessão) não têm uma confirmação de produção própria. Para produção, uma conexão somente leitura é o padrão mais seguro.

Conexões somente leitura ​

Somente leitura nas regras da casa faz o Lily recusar escritas em todo lugar onde roda SQL: o editor, notebooks, arquivos SQL, edições na grade, mudanças de schema, imports, dados falsos, matar sessões e as ações de escrita das telas do Redis, MongoDB e DynamoDB. Conexões somente leitura também ficam fora dos destinos para mover e migrar dados.

O Lily deixa passar comandos que começam com SELECT, WITH, SHOW, DESCRIBE, EXPLAIN, VALUES, TABLE, PRAGMA, USE ou SET, e recusa EXPLAIN ANALYZE, SELECT … INTO e blocos WITH que têm uma escrita dentro.

Uma checagem no Lily, não no banco

O somente leitura é aplicado pelo Lily antes de cada comando, não por uma sessão somente leitura no banco. Um SELECT que chama uma função com efeito colateral (nextval, setval, pg_terminate_backend, funções suas), SELECT … FOR UPDATE e comandos SET continuam rodando. Para ter garantia de verdade, conecte com um usuário do banco que só tem permissão de leitura.

Edições na grade ​

As alterações pendentes da grade são salvas numa transação só. Excluir linhas sempre mostra quais são antes; excluir todas as linhas carregadas pede o nome da tabela. Com Pré-visualizar SQL antes de aplicar edições ligado, você vê os comandos antes de rodar.

Mudanças de schema ​

Toda mudança de schema mostra o SQL antes de rodar. Limpar e qualquer exclusão pedem para digitar o nome.

Transações ​

Executar em transação (⌥ ⌘ ↵) desfaz tudo se um comando falhar, no PostgreSQL, MySQL e SQLite. O ClickHouse não tem transação, então os comandos rodam um por um e não voltam atrás. No Trino depende do conector.

Depois de uma conexão cair ​

Quando o Lily reconecta depois de o Mac dormir ou de uma queda de rede, ele só repete um comando que com certeza é leitura. Uma escrita cujo resultado não se sabe não é reenviada; o Lily avisa para você conferir o resultado antes.

O Lily DB é gratuito para uso pessoal e comercial.