Долгое время для доступа к базам данных использовал веб-интерфейс (легковесный, но функциональный 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 ты указываешь длинный путь к базе - он весь считается "именем" . Это не удобно. Хотелось бы видеть только имя файла базы, а не весь путь.