
Tips & Tricks – Poradnik psql cz. I. – wykorzystanie trybu interaktywnego

Wśród doświadczonych administratorów panują podzielone opinie na temat przewagi trybu tekstowego nad graficznym. Nie da się zaprzeczyć, że umiejętność sprawnego poruszania się w konsoli jest ważna. Nie stanowi to zmartwienia dla użytkowników silnika PostgreSQL, którzy do dyspozycji mają tak sprytne narzędzie jak psql.
Nawet wśród doświadczonych administratorów panują podzielone opinie na temat przewagi trybu tekstowego nad graficznym. Szanując zdanie każdej ze stron, nie da się zaprzeczyć, że umiejętność sprawnego poruszania się w konsoli jest ważna, a bywają sytuacje, w których jest nawet niezbędna. Nie stanowi to zmartwienia dla użytkowników silnika PostgreSQL, którzy do dyspozycji mają tak sprytne narzędzie jak psql.
Podstawową funkcjonalnością klientów baz danych jest umożliwienie manipulowania danymi w odpowiednim języku — tak jest również w wypadku psql. To narzędzie jednak, poza funkcją komunikacji w SQL i np. pl/pgSQL, posiada własne polecenia, które sprawiają, że używanie go jest wyjątkowo przyjemne.
Tryb interaktywny
Podstawową komendą do uruchomienia klienta jest psql -d nazwa_bazy -U nazwa_użytkownika
, jeśli jednak istnieją zarówno użytkownik bazodanowy, jak i baza o tej samej nazwie co nasz użytkownik powłoki, możemy i te parametry pominąć.
Program przed nawiązaniem połączenia do serwera poszuka globalnie i w katalogu domowym użytkownika pliku .psqlrc, a jeśli go znajdzie – wywoła. To bardzo przydatna funkcjonalność, oferująca mnóstwo ułatwień w codziennej pracy administratora, dlatego zasługuje na omówienie w osobnym tekście.
Metakomendy – podstawowe
Po nawiązaniu połączenia (o ile nie zadecydujemy inaczej) w prompcie zobaczymy nazwę bazy, znak =
oraz, w zależności od poziomu uprawnień: #
dla administratora (superuser) lub >
dla zwykłego użytkownika. W każdej chwili możemy zweryfikować nasze połączenie metakomendą \conninfo
lub przełączyć się np. do innej bazy (o ile posiadamy do tego uprawnienia):
Powszechnie znane komendy to te, które służą do wyświetlania obiektów bazodanowych. Polecenia te rozpoczynamy od \d
i w zależności od typu obiektów, które chcemy obejrzeć, podajemy następną literę, np.:
\di
– indeksy\dm
– widoki zmaterializowane (materialized view)\ds
– sekwencje\dt
– tabele\dv
– widoki (view)\df
– funkcje\dn
– schematy, czyli przestrzenie nazw (namespace, schema)\dx
– rozszerzenia (extension)\du
– użytkownicy
Każda z nich może w parametrze przyjąć znak +
(dodatkowe informacje) i /
lub wzorzec nazwy (informacje tylko dla obiektów o nazwie pasującej do wzorca). I tak przykładowo, aby wyświetlić poszerzone informacje o wszystkich schematach (poza systemowymi) w bazie danych użyjemy komendy \dn+
. Następnie, aby sprawdzić listę wszystkich tabel w danym schemacie, skorzystamy z \dt+ [nazwa_schematu].*
, a kiedy znajdziemy poszukiwaną tabelę, jej szczegółowy opis uzyskamy przez \d [nazwa_schematu].[nazwa_tabeli]
.
Jak widzimy, w szczegółowym widoku tabeli znajdziemy dane o skorelowanych z nią indeksach, a pośrednio także o sekwencjach.
Definicje funkcji, a od wersji 9.5 także widoku, możemy zobaczyć za pomocą poleceń: \sf [nazwa_funkcji]
i \sv [nazwa_widoku]
(pamiętajmy o opcjonalnym prefiksie z nazwą schematu). Możemy również przekazać zapytanie tworzące obiekt do bufora i edytować je za pomocą polecenia \ef [nazwa_funkcji]
lub \ev [nazwa_widoku]
(ulubiony edytor wskazujemy komendą \setenv PSQL_EDITOR
, np. \setenv PSQL_EDITOR "/usr/bin/vim"
):
Zwróćmy uwagę na brak średnika w zapytaniu – po zakończeniu edycji narzędzie czeka na naszą decyzję względem wykonania zapytania. Jeśli użyjemy średnika, niezależnie od tego, czy jakieś modyfikacje w definicji zostały wprowadzone, zapytanie zostanie wykonane. Alternatywą jest czyszczenie bufora za pomocą CTR+c
, psql bowiem domyślnie jest kompilowana z wykorzystaniem biblioteki readline, co sprawia, że znajdziemy tu wszystkie pożyteczne skróty klawiaturowe, jak na przykład CTR+l
(czyszczenie ekranu), CTR+r
(przeszukiwanie historii) czy TAB
(auto uzupełnianie):
Jeśli chcemy zobaczyć uprawnienia do obiektu, używamy polecenia \dp
, a gdy szerokość okna utrudni nam odczyt informacji, możemy skorzystać z komendy \x
, która uruchamia rozszerzone wyświetlanie.
Można sobie zadać pytanie, skąd te informacje się biorą i gdzie są przechowywane. Odpowiedź na nie przychodzi, gdy uruchomimy psql z opcją -E
(--echo-hidden
) lub gdy po połączeniu wykorzystamy opcję \set ECHO_HIDDEN ON
. Zobaczymy wówczas, że są to w istocie wyniki zapytań do tabel lub widoków ze schematu pg_catalog:
Opcja ta jest polecana szczególnie osobom, które chcą pogłębić swoją wiedzę na temat silnika. Pomoc w psql jest bardzo rozbudowana. \?
podpowie nam meta komendy narzędzia, \h
pomoże, jeśli zapomnimy elementu ze składni SQL:
Źródło:
https://www.postgresql.org/docs/10/static/app-psql.html