Хочу рассказать о своем опыте работы с SQLPad - это приложение для хранения списка запросов и выполнения их. Почему то в моем окружении нет людей, которые бы знали о нем. Делюсь информацией. Впервые этот SQLPad я увидел в середине прошлого года на вебинаре известного в узких кругах Алексея Лустина (в данный момент он отсутствует на инфостарте, поэтому привожу ссылку на старое интервью с ним - Готовые решения: Алексей Лустин. Выпуск №2).
SQLPad - это веб-приложение, выглядит так:
По должности я очень много работаю с SQL запросами. SQLPad значительно упрощает мою работу за счет сохранения списка запросов и простого запуска запросов "из одного окна" к разным SQL серверам.
Сайт проекта sqlpad.github.io.
Разработчики приложения декларируют поддержку серверов Postgres, MySQL, SQL Server, ClickHouse, Crate, Vertica, Presto, Pinot, Drill, SAP HANA, Snowflake, BigQuery, SQLite. Внушительный список, правда? Я обычно работаю только с SQL Server от Microsoft, но кому то из моих коллег возможно будет интересно подключить приложение к Postgres.
Статья состоит из двух основных частей - использование приложения и установка его в docker.
Использование приложения
Это веб-приложение, оно живет на сервере, доступ к нему осуществляется через браузер. Обычно оно доступно на порту 3000.
Авторизация. Работа с пользователями.
Мое тестовое приложение находится на localhost. По адресу http://localhost:3000/ открывается окно авторизации. Первым должен зайти админ (кнопка Sign In), которого мы укажем при начальной настройке приложения. Кнопка Sign Up может ввести в заблуждение, потому что позволяет зарегистрироваться только пользователю, которого администратор предварительно укажет в списке пользователей.
Пользователей указываем на странице Users. Обязательно указание роли - Admin или Editor, админ может редактировать пользователей и подключения.
Не забываем, что после добавления пользователя он должен пройти процедуру Sign Up на странице авторизации.
Подключения к SQL серверам.
Можно добавлять неограниченное количество подключений. В разделе Connections нажимаем на Add connection, указываем тип сервера (SQL от Misrosoft называется просто SQL Server), заполняем авторизацию, сохраняем настройки.
Создание и выполнение запросов
Запрос можно написать самостоятельно, есть подсказки.
Можно вставить из буфера обмена.
Запрос можно сохранить, указав произвольные теги.
Запросам можно добавлять простые диаграммы.
К сохраненным запросам можно обратиться из списка Queries. Один и тот же запрос можно выполнять на разных серверах.
Если изменить уже сохраненный запрос и не сохранить его изменения, при вызове такого запроса приложение покажет разницу в запросах и спросит, использовать сохраненный вариант или новый.
Установка в Docker
Я устанавливаю/запускаю SQLPad в Docker - сейчас это быстро и удобно. Приведу цитату из Вики:
Docker — программное обеспечение для автоматизации развёртывания и управления приложениями в средах с поддержкой контейнеризации. Позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, который может быть перенесён на любую Linux-систему с поддержкой cgroups в ядре, а также предоставляет среду по управлению контейнерами.
Docker хорошо работает и на Windows.
1. Нужно установить Docker Desktop.
Установка относительно проста, делается инсталлятором с Install Docker Desktop on Windows. Единственное, на что хочу обратить внимание - SQLPad лучше работает WSL2 (Windows Subsystem for Linux — слой совместимости для запуска Linux-приложений).
Если чекбокс "Use the WSL 2 based engine" у вас неактивен - потратьте немного времени и последуйте инструкциям Docker Desktop WSL 2 backend и Windows Subsystem for Linux Installation Guide for Windows 10, чтобы запустить у себя эту подсистему, поверьте, усилия себя оправдают.
2. Скачаем образ SQLPad c DockerHub, для этого в командной строке выполним следующее:
docker pull sqlpad/sqlpad
После этого в приложении docker у вас появится доступный для использования образ.
3. Теперь можно вручную запустить контейнер с приложением, как показано на рисунке ниже, но это не удобно, нужно указывать параметры:
Мы воспользуемся приложением docker-compose. Смысл этого приложения в том, что контейнер создается автоматически по специальному описанию из текстового файла docker-compose.yaml. Ну а текстовые файлы мы любим, их можно прочитать и записать в обычном редакторе, версионировать в git. И конечно хранение описания контейнера в тексте приближает нас к концепции - "Всё есть код".
Я привожу пример файла, создающего только SQLPad, однако в этом файле можно описать и другие контейнеры, они все будут запущены одновременно.
Разберу некоторые моменты в этом файле.
container_name: my_sqlpad |
указываем произвольное имя контейнера, будет полезно, если вы запускаете одновременно несколько с разными параметрами |
image: "sqlpad/sqlpad" |
указываем использование образа SQLPad для создания контейнера |
ports: - 3000:3000 |
пробрасываем порт 3000 внутри образа. Если порт 3000 в хосте занят, можно указать другой порт, например 4000:3000 будет означать, что к веб-приложению снаружи мы обращаемся по порту 4000, тогда как в самом контейнере оно будет по прежнему работать на порту 3000 |
environment: - SQLPAD_ADMIN=yuriy.bylinkin@gmail.com - SQLPAD_ADMIN_PASSWORD=secret |
Чтобы не возиться с заведением первоначального пользователя, укажем нужного пользователя при создании контейнера, я указал свой емейл и свой любимый (нет конечно) пароль |
volumes: - ./sqlpad_storage:/var/lib/sqlpad |
Это самое интересное. Здесь мы указываем, что база данных и настроечные файлы приложения SQLPad будет фактически находиться на хосте - в папке sqlpad_storage, находящейся там же, где и сам файл docker-compose |
Последний параметр нам позволяет при пересоздании контейнера docker (например при перезагрузке Windows), подхватить имеющиеся настройки.
Очень удобно, собственно это и позволяет нам использовать это приложение с docker в продуктиве. Я переносил папку на другие компьютеры и на них заново созданный контейнер с SQLPad успешно работал с ней, таким способом я фактически переносил список сохраненных запросов из одного окружения в другое, нужно было только сделать другое соединение с SQL сервером.
Переходим в папку с файлом docker-compose и выполняем команду
docker-compose up -d
В приложении Docker Desktop в разделе Containers/Apps появился наш контейнер
Он расположен в группе git, потому что мой docker-compose файл находится в этой папке, имеет то название и порт, которые мы ему дали.
Теперь просто запускаем в браузере http://localhost:3000/ (или IP-адрес или доменное имя компьютера, на котором подняли контейнер), авторизуемся и начинаем лить слезы счастья.
К статье приложен пример файла docker-compose, однако это обычный текстовый файл, вы можете написать его самостоятельно.