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.
- Conexões somente leitura recusam (veja abaixo).
- Os parâmetros são preenchidos.
- Impacto. Para um único
INSERT,UPDATE,DELETE,TRUNCATEouDROP, 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
| Comando | Como o Lily conta |
|---|---|
UPDATE / DELETE … WHERE | SELECT count(*) com o seu WHERE (exato) |
UPDATE / DELETE sem WHERE, TRUNCATE, DROP | O tamanho da tabela (aproximado, marcado com ~) |
INSERT … VALUES | As linhas do comando |
INSERT … SELECT | count(*) 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:
UPDATEouDELETEsemWHERE(afeta todas as linhas);TRUNCATEeDROP;- qualquer escrita numa conexão de Produção, inclusive
CREATE,ALTEReGRANT; - 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.