wtorek, 18 marca 2014

Prompt w PostgreSQL-u

Jak zmienić prompt w PostgreSQL-u?


Informacja o psql prompte jest trzymana w zmiennych: PROMPT1, PROMPT2 i PROMPT3. Są one wyświetlane w różnym czasie:
  • PROMPT1 - domyślny (jeśli go nie zmieniliśmy to jest on ustawiony na: '%/%R%# ', tak samo jak PROMPT2)
  • PROMPT2 - wyświetlany, gdy spodziewane jest wprowadzenie danych wejściowych. Np. gdy nie domkneliśmy znaku cytowania. 
  • PROMPT3 - wyświetlany, przy wywołaniu polecenia COPY i wyświetlaniu wynik na terminal. Domyślnie jest ustawiony na '>> '

Aby zmienić prompt, możemy użyć polecenia \set.

\set PROMPT1 string

String jest drukowany dosłownie, chyba że napotka na znak %. W zależności od znaku następnego (po %) jest podmieniany na inną informację.

Znak Opis
%M Pełna informacja na temat nazwy hosta serwera bazodanowego. Jeśli klient łączy się przy pomocy soceta, będzie widział: [local] lub [local:/dir/path] jeśli socet po którym się łączymy, nie jest na standardowej ścieżce.
%m Ta sama informacja co przy %M, ale nazwa hosta jest obcinana do pierwszej kropki.
%> Numer porta, na którym nasłuchuje serwer
%n User name sesji
%/ Nazwa bazy danych
%~ To samo co '%/' ale wynikiem jest ~ (tylda) jeśli bada zanych jest twoją domyślna bazą
%# Jeśli użytkownik jest superuser, to '>' jest zmieniane na '#'
%R Dla PROMPT1:
  • , - domyślnie
  • ^ - psql działa w single-line mode
  • ! - sesja jest niepodłączona do bazy danych
%x Zwraca status transakcji:
  • pusty string - nie jest w bloku transakcji
  • * - jest w bloku transakcji
  • ! - transakcja się nie udała
  • ? - status transakcji jest nieokreślony
%znak Znak wskazujący na znak kodu ósemkowego
%:name: Wartość zmiennej o nazwie name
%`command` Wynik działania polecenia command
%[...%] Można nadać promptowi znaki kontrolne terminala dla np. zmiany koloru, tła albo stylu tekstu. Albo zmienić nazwę okna terminala. Znaki kontrolne muszą być oznaczone jako niewidoczne przez otaczające je %[ i %]


Przejdźmy do przykładów

Oto przykład prompta, który zawiera informację o hoście, porcie, użytkowniku, którym się łączę i nazwy bazy danych. Te informację są wyróżnione białą grubą czcionką. Dodatkowe chce mieć informację, jeśli jestem w bloku transakcji (Jeśli jesteśmy w bloku transakcji, to w promptcie pojawi się żółta gwiazdka).

\set PROMPT1 '%[%033[33;1m%]%x%[%033[0m%]%[%033[1m%]%M:%>@%n (%/)%[%033[0m%]%R%# '



Dzięki poleceniu date, możemy także wyświetlić informację o czasie:


Jeśli chcemy ustawić nasz prompt na stałe, możemy mieścić to polecenie w pliku $HOME/.psqlrc

∴ cat /home/ela/.psqlrc 
\set PROMPT1 '\n[%`date +"%H:%M:%S"`]\n%[%033[33;1m%]%x%[%033[0m%]%[%033[1m%]%M:%>@%n (%/)%[%033[0m%]%R%# '
14:18:25 ela@localhost:~  ruby-1.9.3-p194 
∴ 

Plik $HOME/.psqlrc determinuje zachowanie programu psql wiersza poleceń. Jest on czytany przy starcie.


Dokumentacja: http://www.postgresql.org/docs/9.1/static/app-psql.html#APP-PSQL-PROMPTING

Brak komentarzy:

Prześlij komentarz