Como ver um ficheiro de base de dados SQLite no Mac
Encontraste um ficheiro .sqlite, .db ou .sqlite3 algures no teu Mac, na pasta de suporte de uma app, numa cópia de segurança, num projeto que estás a depurar, e queres saber o que está lá dentro de verdade. O duplo clique não faz nada de útil. O Quick Look mostra-te uma pré-visualização em branco ou texto ilegível. Precisas de um visualizador de ficheiros SQLite a sério, e não é óbvio a que ferramenta recorrer.
Porque é que não o podes abrir como um ficheiro normal
As bases de dados SQLite são ficheiros binários, não texto. Os primeiros 100 bytes são um cabeçalho fixo: uma string mágica que se lê SQLite format 3, seguida de campos como o tamanho da página, a codificação de texto e um schema cookie que muda sempre que a estrutura das tabelas é alterada. Depois desse cabeçalho vêm os dados de página em si, organizados como uma b-tree, e é por isso que um editor de texto os apresenta como ruído.
O Quick Look do Finder não interpreta nada disto. O TextEdit interpreta-os como texto simples e mostra-te sobretudo caracteres ilegíveis com algumas strings reconhecíveis à mistura (nomes de tabelas, nomes de colunas, e quaisquer dados de texto guardados nas tabelas tendem a sobreviver porque o SQLite guarda as strings em grande parte tal como estão). Nada disso te diz se o ficheiro é de facto válido, com que tamanho de página foi criado, ou porque é que outra app se recusa a abri-lo.
As tuas opções para espreitar lá dentro
A ferramenta de linha de comandos sqlite3. O macOS traz o sqlite3 no Terminal. Corre sqlite3 yourfile.db ".schema" e obténs as definições das tabelas, ou .tables para uma lista rápida. Isto funciona bem se já sabes que é uma base de dados válida e queres consultá-la. É menos útil se não tens a certeza de que o ficheiro é válido à partida, porque um cabeçalho corrompido produz apenas um erro críptico sem detalhe sobre o que está errado.
O DB Browser for SQLite. É a ferramenta certa se o teu objetivo é mesmo navegar pelas linhas das tabelas, editar dados ou correr consultas SQL. É gratuito, bem mantido e feito especificamente para esse trabalho. Se precisas de explorar os dados dentro das tabelas, para de ler isto e vai buscar o DB Browser.
Um editor hexadecimal com consciência de SQLite. É a opção para uma pergunta diferente: não “o que está nas tabelas” mas “o que é este ficheiro, na verdade”. É essa a lacuna que o Hexter preenche. Abres o ficheiro e ele lê só de leitura por predefinição, por isso não estás a arriscar o ficheiro só por olhar. O separador Analisar reconhece o cabeçalho SQLite à primeira e destaca os campos, tamanho da página, codificação, schema cookie, ao lado do hex em bruto, para que possas confirmar que o ficheiro é mesmo SQLite, verificar com que tamanho de página foi construído, ou detetar um cabeçalho que foi truncado ou substituído antes de o entregares a algo que espera uma base de dados limpa.
Quando a vista dos bytes em bruto conta mesmo
Algumas situações em que ver o cabeçalho diretamente, e não só os resultados da consulta, poupa tempo:
- Um ficheiro não abre na tua app, e não tens a certeza de que é mesmo SQLite. Algumas apps escrevem ficheiros com a extensão
.dbque nem sequer são SQLite. Verificar a string mágicaSQLite format 3nos primeiros 16 bytes responde a isso em segundos. - Estás a depurar um pipeline de sincronização ou de cópia de segurança e suspeitas que um ficheiro foi truncado ou corrompido no percurso. Um cabeçalho cortado a meio, ou um campo de tamanho de página que não bate certo com o tamanho real do ficheiro, é um diagnóstico rápido.
- Queres confirmar a codificação de texto de uma base de dados (UTF-8 vs UTF-16) antes de escrever código que a leia, sem arrancar uma biblioteca de base de dados inteira só para fazer uma pergunta.
- Estás a fazer engenharia inversa ao armazenamento local de uma app e queres ver exatamente o que está em disco antes de decidir se vale a pena escrever uma consulta SQL como deve ser.
Como fazê-lo
- Abre o ficheiro
.sqliteou.dbno Hexter. Abre só de leitura, por isso não há risco de modificar por acidente uma base de dados que precisas de manter intacta. - Abre a barra lateral do Inspetor e muda para o separador Analisar.
- O Hexter deteta o cabeçalho SQLite automaticamente e mostra-te os campos interpretados ao lado dos deslocamentos de byte de onde vieram.
- Se precisares de olhar mais de perto para um campo específico, como o tamanho da página ou o schema cookie, seleciona esses bytes na grelha hexadecimal e o Inspetor mostra-te a interpretação numérica diretamente.
Se o que precisas de facto a seguir a isso é consultar as tabelas, é aí que mudas para o sqlite3 ou o DB Browser. São as ferramentas certas para esse trabalho. O Hexter é para os dez segundos antes disso, quando só precisas de saber para o que estás a olhar.
O Hexter é um editor hexadecimal nativo para macOS, feito para tornar exatamente este tipo de inspeção de ficheiros segura por predefinição: só de leitura até ativares a edição explicitamente, com interpretação de estruturas integrada para ficheiros SQLite, PNG, ZIP, Mach-O e WAV.