Psql

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):

conninfo

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].

desc

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"):

ev

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):

read

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.

dp

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:

hidden

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:

total_syntax

syntax

psql – Tips & Tricks – ten materiał
psql – Tips & Tricks II
psql – Tips & Tricks III

Źródło:
https://www.postgresql.org/docs/10/static/app-psql.html

Autorzy

Artykuły na blogu są pisane przez osoby z zespołu EuroLinux. 80% treści zawdzięczamy naszym developerom, pozostałą część przygotowuje dział sprzedaży lub marketingu. Dokładamy starań, żeby treści były jak najlepsze merytorycznie i językowo, ale nie jesteśmy nieomylni. Jeśli zauważysz coś wartego poprawienia lub wyjaśnienia, będziemy wdzięczni za wiadomość.