Personalizando psql

Como personalizar o psql para ele diferenciar visualmente o servidor de destino em que você está conectado?

Uma das ferramentas mais utilizadas na administração do PostgreSQL é o nosso bom e velho psql. Sua interface em modo texto permite a sua utilização local ou remota de maneira rápida e eficiente nos com alguns recursos interessantes como por exemplo a uomplementação de código baseada em contexto (proporcionado pelo readline).

Outro recurso que utilizo é a personalização do prompt, e este é muito útil para quem está acostumado a conectar em vários servidores distintos, administrando várias bases de dados em cada um deles, pois ele pode lhe fornecer dados interessantes de uma forma simples e prática.

Vou tentar exemplificar: imagine um cenário onde você administre 3 (três) servidores diferentes, cada um deles contendo algumas bases de dados, conforme a figura abaixo:

Você pode utilizar o script a seguir para definir o um prompt personalizado para cada servidor:

#!/bin/sh
########################################################
#
# Script inicializacao de parametros do psql
#
#
# 2007-2008 (c) Dickson Guedes <guediz at gmail dot com>
########################################################
ARG1=$1

PSQL_RC="$HOME/.psqlrc"

PROMPT_SRV01='%[%033[44;37;1m%](%`date +%H:%M:%S`) %n@%M:%>/%/ %[%033[0m%]\\n%x%# '
PROMPT_SRV02='%[%033[43;37;1m%](%`date +%H:%M:%S`) %n@%M:%>/%/ %[%033[0m%]\\n%x%# '
PROMPT_SRV03='%[%033[41;37;1m%](%`date +%H:%M:%S`) %n@%M:%>/%/ %[%033[0m%]\\n%x%# '
PROMPT_DEFAULT='%[%033[40;37;1m%](%`date +%H:%M:%S`) %n@%M:%>/%/ %[%033[0m%]\\n%x%# '

SERVIDOR=${ARG1:=srv01}

define_psqlrc() {
		echo "\set QUIET 1" > $PSQL_RC
		echo "\pset null '(null)'" >> $PSQL_RC
		echo "\set PROMPT1 '$1'" >> $PSQL_RC
		echo "\set PROMPT2 '| '" >> $PSQL_RC
		echo "\set HISTSIZE 5000" >> $PSQL_RC
		echo "\set HISTFILE ~/.psql_history- :DBNAME" >> $PSQL_RC
		echo '\\timing' >> $PSQL_RC
		echo "\set QUIET 0" >> $PSQL_RC
}

case $1 in
		srv01) define_psqlrc "$PROMPT_SRV01" ;;
		srv02) define_psqlrc "$PROMPT_SRV02" ;;
		srv03) define_psqlrc "$PROMPT_SRV03" ;;
			*) define_psqlrc "$PROMPT_DEFAULT" ;;
esac

psql -h $SERVIDOR
## FIM DO SCRIPT

A data é apresentada através do uso da sequência de escape %`command`. Já as cores são mostradas através do uso da sequência de escape %[ … %].

Outras sequências de escape e personalizações podem ser encontradas no manual do psql.

comments powered by Disqus