Hexter

Как посмотреть файл базы данных SQLite на Mac

Вы нашли где-то на своём Mac файл .sqlite, .db или .sqlite3, в папке поддержки приложения, в резервной копии, в проекте, который отлаживаете, и хотите узнать, что на самом деле внутри. Двойной клик не даёт ничего полезного. Quick Look показывает пустой предпросмотр или искажённый текст. Вам нужен настоящий просмотрщик файлов SQLite, и не очевидно, за какой инструмент браться.

Почему нельзя просто открыть его как обычный файл

Базы данных SQLite являются двоичными файлами, а не текстом. Первые 100 байтов представляют собой фиксированный заголовок: магическая строка, которая читается как SQLite format 3, за которой следуют поля вроде размера страницы, текстовой кодировки и schema cookie, меняющегося каждый раз при изменении структуры таблиц. После этого заголовка идут собственно данные страниц, организованные как b-дерево, из-за чего текстовый редактор отображает их как шум.

Quick Look в Finder ничего из этого не разбирает. TextEdit интерпретирует это как обычный текст и показывает вам в основном нечитаемые символы с несколькими узнаваемыми строками (имена таблиц, имена столбцов и любые текстовые данные, хранящиеся в таблицах, обычно уцелевают, потому что SQLite хранит строки в основном как есть). Ничто из этого не говорит, действительно ли файл валиден, с каким размером страницы он был создан или почему какое-то другое приложение отказывается его открывать.

Ваши варианты, чтобы заглянуть внутрь

Инструмент командной строки sqlite3. macOS поставляется с sqlite3 в Terminal. Запустите sqlite3 yourfile.db ".schema", и вы получите определения таблиц, или .tables для быстрого списка. Это хорошо работает, если вы уже знаете, что это валидная база данных, и хотите к ней обращаться с запросами. Это менее полезно, если вы не уверены, что файл вообще валиден, поскольку повреждённый заголовок просто выдаёт загадочную ошибку без деталей о том, что не так.

DB Browser for SQLite. Это правильный инструмент, если ваша настоящая цель состоит в том, чтобы просматривать строки таблиц, редактировать данные или выполнять SQL-запросы. Он бесплатный, хорошо поддерживается и создан специально для этой задачи. Если вам нужно изучить данные внутри таблиц, прекращайте читать это и идите за DB Browser.

Шестнадцатеричный редактор с пониманием SQLite. Это вариант для другого вопроса: не «что в таблицах», а «что это за файл на самом деле». Именно этот пробел заполняет Hexter. Откройте файл, и он по умолчанию доступен только для чтения, так что вы не рискуете файлом просто глядя на него. Вкладка «Анализ» распознаёт заголовок SQLite с ходу и раскладывает поля, размер страницы, кодировку, schema cookie, рядом с сырым hex, так что вы можете подтвердить, что файл действительно SQLite, проверить, с каким размером страницы он был создан, или заметить заголовок, который был обрезан или перезаписан, прежде чем вы вообще передадите его чему-то, что ожидает чистую базу данных.

Схема, показывающая первые 100 байтов файла SQLite, разбитые на поля заголовка: магическая строка, размер страницы, кодировка и schema cookie, рядом с сырыми hex-байтами, которые отображает Hexter.
Первые 100 байтов любого файла SQLite представляют собой фиксированный заголовок. Hexter читает его прямо из сырых байтов.

Когда вид сырых байтов действительно важен

Несколько ситуаций, где увидеть заголовок напрямую, а не только результаты запроса, экономит время:

  • Файл не открывается в вашем приложении, и вы не уверены, что это действительно SQLite. Некоторые приложения пишут файлы с расширением .db, которые вовсе не SQLite. Проверка магической строки SQLite format 3 в первых 16 байтах отвечает на это за секунды.
  • Вы отлаживаете конвейер синхронизации или резервного копирования и подозреваете, что файл был обрезан или повреждён при передаче. Заголовок, обрезанный на полуслове, или поле размера страницы, не совпадающее с реальным размером файла, служат быстрым диагнозом.
  • Вы хотите подтвердить текстовую кодировку базы данных (UTF-8 против UTF-16) прежде, чем писать код, который её читает, не поднимая полноценную библиотеку баз данных ради одного вопроса.
  • Вы реверс-инженерите локальное хранилище приложения и хотите увидеть, что именно лежит на диске, прежде чем решать, стоит ли писать полноценный SQL-запрос к нему.

Как это сделать

  1. Откройте файл .sqlite или .db в Hexter. Он открывается только для чтения, так что нет риска случайно изменить базу данных, которая должна остаться целой.
  2. Откройте боковую панель инспектора и переключитесь на вкладку «Анализ».
  3. Hexter обнаруживает заголовок SQLite автоматически и показывает разобранные поля рядом со смещениями байтов, из которых они взялись.
  4. Если нужно рассмотреть конкретное поле поближе, например размер страницы или schema cookie, выделите эти байты в шестнадцатеричной сетке, и инспектор покажет вам числовую интерпретацию напрямую.

Если после этого вам на самом деле нужно обращаться к таблицам с запросами, тогда вы переключаетесь на sqlite3 или DB Browser. Это правильные инструменты для той задачи. Hexter пригодится для тех десяти секунд до неё, когда вам просто нужно понять, на что вы смотрите.

Hexter представляет собой нативный шестнадцатеричный редактор для macOS, созданный, чтобы сделать именно такой осмотр файлов безопасным по умолчанию: только для чтения, пока вы явно не включите редактирование, со встроенным разбором структур для файлов SQLite, PNG, ZIP, Mach-O и WAV.