Personalizando o psqlUma 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 presenteando com alguns recursos interessantes como por exemplo a complementaçã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:

Personalizando o psql

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

Com esse script eu posso executá-lo e obter prompts diferenciados para cada servidor:

Personalizando o psql

Personalizando o psql

Personalizando o psql

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.

Bom, é isso!