April 5, 2018

Настройка отображения для clickhouse-client

Изначально для клиента ClickHouse не было возможности изменить настройки отображения как, например, в PostgreSQL. Начиная с версии 1.1.54371 это стало возможным и для ClickHouse.

Многие часто работают с несколькими открытыми клиентами сразу и в такой ситуации достаточно просто ошибиться выполнив команду не на том сервере, например, как в случае с GitLab. Работая с PostgreSQL или другими СУБД обычно настраивают отображение информации о сервере с которым в данный момент соединен клиент. В ClickHouse теперь действует похожий механизм, но, дополнительно, сервер может присылать имя для отображения в клиенте. Имя сервера задается в конфигурационном файле /etc/clickhouse-server/config.xml секция display_name.

Настройки клиента хранятся в файле /etc/clickhouse-client/config.xml, за отображение отвечает секция prompt_by_server_display_name:

<prompt_by_server_display_name>
    <default>{display_name} :) </default>
    <test>{display_name} \x01\e[1;32m\x02:)\x01\e[0m\x02 </test>
    <production>{display_name} \x01\e[1;31m\x02:)\x01\e[0m\x02 </production>
</prompt_by_server_display_name>
<!--
Список цветов терминала https://misc.flogisoft.com/bash/tip_colors_and_formatting
Маркеры `RL_PROMPT_START_IGNORE' и `RL_PROMPT_END_IGNORE' для readline https://wiki.hackzine.org/development/misc/readline-color-prompt.html заменяются на восьмеричные escape-последовательности
-->

clickhouse-client custom prompt

Как видно из примера в файле можно задавать несколько вариантов для отображения - это сделано для того, что бы можно было задать индивидуальное отображение для различных групп серверов. Клиент ищет подстроку (является ключом) в имени которое при подключении сообщает сервер, новая настройка сервера отвечающая за это display_name, в HTTP протоколе это поле передается в заголовке X-ClickHouse-Server-Display-Name. Например секция production будет использоваться для серверов с именами: production, production shard_1, server is production и т.д..

Помимо уже указанного макроса display_name существуют и другие:

  • {host}
  • {port}
  • {user}
  • {database}