venerdì 5 dicembre 2014

Calendario dell'Avvento ITPUG: 5 Dicembre

psql si presenta come una shell verso PostgreSQL. E come tutte le shell che si rispettino, anche psqlpermette all'utente di modificare il proprio prompt, adattandolo alle proprie esigenze.
L'analogia con le shell (csh, zsh, bash) è quanto mai obbligatoria, visto che i meccanismi sono i medesimi:
  • definizione di una serie di variabili speciali che vengono espanse con dei valori prefissati (es. nome utente, nome del database, ecc.)
  • interpolazione di alcune sequenze di escape (stile bash, ossia con le parentesi quadre!)
  • definizione di una serie di variabili del programma psql che siusano per renderizzare il prompt

In psql il prompt viene renderizzato con due variabili:
  • PROMPT1: il promp classico
  • PROMPT2: il prompt delle righe di completamento comando (quando uno statement non viene completato su una sola riga)
Esiste anche un PROMPT3 che qui non mi interessa trattare.

Fatta questa premessa sul prompt di psql io sono solito modificare il comportamento standard per far assomigliare maggiormente il prompt di psql a quello delle mie shell utente. In particolare mi piace inserire l'informazione sull'utente correntemente connesso al database, il database (ovviamente), la macchina e la porta a cui sono collegato.
Questo consente rapidamente di capire a "chi" sono connesso quando tengo aperte piu' sessioni fra istanze differenti.

Il tutto si traduce come:

\set PROMPT1 '[%n@%/ %m:%>  %x %# '
 
 ossia
 
'nome_utente@database nome_host:porta_tcp #'

Abbastanza utile il marcatore %x che viene espanso in stringa vuota se non vi sono transazioni attive e in un carattere '*' se si è all'interno di un blocco di transazione.
Per il PROMPT2 (quello multiriga) solitamente opto per qualcosa di piu' corto: nome utente e database, giusto per essere sicuro di fare il COMMIT sul database giusto!

E per un po' di mal di testa, ecco una versione colorata da inserire nel proprio ~/.psqlrc:

\set PROMPT1 '%[\033[0;1;33m%][%[\033[0;1;
37m%]%n%[\033[0;1;31m%]@%[\033[0;1;37m%]%/%[\033[0;1;33m%]
%[\033[0;1;34m%]%m:%>% %[\
\033[0;1;33m%]%[\033[0;1;33m%]
]%[\033[0;1;32m%] %x %# %[\033[0;1;37m%]'
\set PROMPT2 ' %n%[\033[0;1;31m%]@%[\033[0;1;
37m%]%/%[\033[0;1;33m%]
%[\033[0;1;32m%] %x %# %[\033[0;1;37m%]'

Nessun commento: