🖥 Консольный клиент для PostrgreSQL/SQLite/MySQL с автокомплитом и раскраской кода
Долгое время для доступа к базам данных использовал веб-интерфейс (легковесный, но функциональный adminer), но при работе с СУБД на удаленных серверах или в docker-контейнерах городить каждый раз огород с веб-сервером, открытием портов и т.п. не удобно, поэтому все чаще стал пользоваться штатными консольными клиентами, но почти сразу захотелось большего удобства и немного поискав и наткнулся на https://litecli.com/ и <del>его братья и сестры</del> аналогичные клиенты для других популярных баз данных https://www.dbcli.com/
На голову удобнее штатных консольных клиентов и все построены по одному принципу — и их "одинаковость" в плане не-специфичного для СУБД функционала — огромный плюс для меня.
Но сразу пришлось кое-что настраивать под себя. На примере litecli:
1. Если используешь тему по умолчанию (она так и называется default), то при включенной теме SolarizedDark в моем xterm некоторые символы не видно. Поэтому пришлось тему поменять на другую: мне подошла rtt, в которой подсветка ключевых слов более подходящая. Тема изменяется в конфиге ~/.config/litecli/config, параметр syntax_tyle. Темы Solarized у клиента пока нет.
2. Мне не удобным оказался включенный по умолчанию пейджинг (постраничная навигация) вывода команды, т.к. зачастую при написании очередной команды мне хочется видеть вывод предыдущей команды. Но пейджинг отключается/включается обратно прямо из клиента командами nopager и pager соответственно, и в конфиге можно указать состояние по умолчанию. Я по умолчанию пейджинг отключил — указал enable_pager = False в конфиге.
3. На сервере Digital Ocean (DO) клиент командой pip3 install -U litecli установился в ~/.local/bin, но в $PATH при этом не попал, пришлось прописывать этот каталог в PATH отдельно. Но возможно это из-за того, что у меня в .zshrc PATH уже был переопрелелен и, не правильно (хотя локально при тех же конфигах все заработало из коробки).
4. litecli написан на python, и после установки на DO (почти еще чистый сервер на Ubuntu, там стоял только python3 и некоторые библиотеки) сразу поругался на меня RuntimeError: Click will abort further execution because Python 3 was configured to use ASCII as encoding for the environment. и не запустился. Для исправления пришлось поставить локали и экспортировать переменные LC_ALL и LANG:
# Ставим локали:
sudo locale-gen ru_RU
sudo locale-gen ru_RU.UTF-8
sudo update-locale
# В ~/.zshrc добавляем строки:
export LC_ALL=ru_RU.utf-8
export LANG=ru_RU.utf-8
После этого все заработало.
5. По умолчанию многострочность отключена. Режим переключается нажатием клавиши F3, но по умолчанию отключен и при нажатии Enter в конце строки набираемый запрос выполнится. Я привык завершать запросы точкой с запятой, поэтому в конфиге указал multi_line = True, чтобы по умолчанию можно по нажатию Enter набранный запрос выполнялся только если Enter нажат после точки с запятой.
6. Пока не нашел, как решить: в prompt'е по умолчанию выводится имя выбранной базы данных - это отлично, но когда в случае sqlite ты указываешь длинный путь к базе - он весь считается "именем" . Это не удобно. Хотелось бы видеть только имя файла базы, а не весь путь.