Blog JSystems - uwalniamy wiedzę!

Szukaj

PostgreSQL

psql - podstawowe narzędzie administratora, które warto znać

W skrócie

  • Zaczynamy pracę z PostgreSQL i szukamy wszystkiego w graficznym kliencie, gubiąc czas na czynności, które w psql zajmują sekundy.
  • psql to wbudowany klient wiersza poleceń, który dostajemy razem z bazą, ale bez znajomości poleceń z odwrotnym ukośnikiem wydaje się surowy i nieprzyjazny.
  • Poznajemy garść metapoleceń do przeglądania obiektów, łączenia się i uruchamiania skryptów, dzięki czemu psql staje się najszybszym narzędziem administratora.

psql to podstawowe narzędzie każdego administratora PostgreSQL. Jest zawsze pod ręką, bo instaluje się razem z bazą, działa przez SSH na każdym serwerze i nie wymaga środowiska graficznego. Początkującym wydaje się ubogi, ale to złudzenie - psql ma dziesiątki metapoleceń zaczynających się od odwrotnego ukośnika, które błyskawicznie pokazują strukturę bazy, uprawnienia i stan obiektów. Kilka z nich wystarczy, aby wykonywać codzienne zadania szybciej niż w jakimkolwiek kliencie graficznym.

Jak to wygląda w praktyce

Osoba znająca tylko narzędzia graficzne po zalogowaniu na serwer produkcyjny przez SSH czuje się zagubiona - nie ma okienek, jest tylko znak zachęty. Żeby sprawdzić listę tabel, próbuje pisać zapytania do katalogu systemowego, choć wystarczyłoby jedno metapolecenie. Żeby zobaczyć definicję tabeli, szuka jej w dokumentacji, zamiast wyświetlić ją od ręki. Objawem braku wprawy w psql jest wolne, męczące poruszanie się po bazie i przepisywanie długich zapytań do information_schema tam, gdzie skrót załatwia sprawę natychmiast. Tymczasem to właśnie na serwerze bez GUI psql jest często jedynym dostępnym narzędziem, więc jego znajomość jest nie luksusem, lecz koniecznością.

Dlaczego tak się dzieje

psql łączy w sobie dwie warstwy. Pierwsza to zwykły interpreter SQL - wszystko, co wpiszemy zakończone średnikiem, leci do bazy jako zapytanie. Druga to metapolecenia klienta, które zaczynają się od odwrotnego ukośnika i nie są SQL-em; obsługuje je sam psql, tłumacząc je pod spodem na odpytania katalogu systemowego i formatując wynik w czytelną tabelę. Początkujący nie wie o tej drugiej warstwie, więc próbuje robić ręcznie to, co metapolecenia dają od razu. Do tego dochodzi konfiguracja połączenia: psql czyta parametry hosta, portu, użytkownika i bazy z argumentów oraz ze zmiennych środowiskowych, a hasło może brać z pliku ukrytego w katalogu domowym, dzięki czemu nie trzeba go wpisywać za każdym razem.

Jak to rozwiązać krok po kroku

  1. Połącz się z bazą podając użytkownika, host i nazwę bazy: psql -h 127.0.0.1 -U postgres -d nazwa_bazy. Bez podania bazy psql łączy się z bazą o nazwie użytkownika.
  2. Rozejrzyj się po instalacji. \l pokazuje listę baz, \c nazwa_bazy przełącza aktywne połączenie, a \dn wyświetla schematy.
  3. Przeglądaj obiekty. \dt to lista tabel, \di indeksy, \dv widoki, a \df funkcje. Dodanie znaku plus, na przykład \dt+, dokłada rozmiary.
  4. Zajrzyj do struktury konkretnego obiektu poleceniem \d nazwa_tabeli - pokaże kolumny, typy, indeksy, klucze i ograniczenia bez pisania jakiegokolwiek zapytania.
  5. Sprawdzaj uprawnienia i role: \du listuje role i ich atrybuty, a \dp pokazuje uprawnienia nadane na tabelach.
  6. Uruchamiaj skrypty i zapisuj wyniki. \i sciezka/plik.sql wykonuje polecenia z pliku, a \timing on włącza pomiar czasu każdego zapytania. Klienta zamykasz przez \q.
  7. Ułatw sobie pracę na stałe: załóż w katalogu domowym plik .psqlrc z ustawieniami, na przykład włączonym timingiem, oraz plik .pgpass z hasłem, aby psql nie pytał o nie przy każdym logowaniu.

Jak sprawdzić, że zadziałało

Sprawdź wersję i połączenie zaraz po wejściu: SELECT version(); potwierdzi, że jesteś w bazie, a znak zachęty pokaże nazwę aktywnej bazy. Wykonaj \conninfo, aby zobaczyć, jako kto i do czego jesteś podłączony. Następnie sprawdź dowolne metapolecenie, na przykład \dt - jeśli zwróci listę tabel w czytelnej tabelce, warstwa metapoleceń działa. Jeśli po założeniu pliku z hasłem kolejne uruchomienie psql łączy się bez pytania o hasło, konfiguracja jest kompletna i możesz pracować płynnie także na serwerach bez środowiska graficznego.

Wróć do listy: 100 najczęstszych pytań i problemów z PostgreSQL

Szkolenie Administracja, replikacja i tuning baz danych PostgreSQL

Sprawdź szkolenie: Administracja, replikacja i tuning baz danych PostgreSQL

To szkolenie może być dofinansowane z KFS lub BUR.

★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Szkolenie Zaawansowana administracja PostgreSQL - HA, DR, monitoring, skalowanie

Sprawdź szkolenie: Zaawansowana administracja PostgreSQL (HA, DR, monitoring, skalowanie)

To szkolenie może być dofinansowane z KFS lub BUR.

★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Najczęściej zadawane pytania

Jak połączyć się z bazą przez psql?
Podaj hosta, użytkownika i nazwę bazy, na przykład psql z flagami h dla hosta, U dla użytkownika i d dla nazwy bazy. Jeśli nie podasz bazy, psql spróbuje połączyć się z bazą o nazwie takiej jak użytkownik. Hasło możesz trzymać w pliku pgpass w katalogu domowym, aby psql nie pytał o nie przy każdym logowaniu.
Jak zobaczyć listę tabel i strukturę obiektu w psql?
Użyj metapoleceń zaczynających się od odwrotnego ukośnika. Polecenie do wyświetlenia tabel to backslash dt, a strukturę konkretnej tabeli z kolumnami, indeksami i ograniczeniami pokaże backslash d z nazwą tabeli. Dodanie znaku plus, na przykład backslash dt plus, dokłada informacje o rozmiarach.
Czym różnią się polecenia SQL od metapoleceń w psql?
Polecenia SQL kończysz średnikiem i lecą one do bazy jako zapytania. Metapolecenia zaczynają się od odwrotnego ukośnika, obsługuje je sam psql i służą do zarządzania sesją oraz szybkiego przeglądania katalogu, na przykład listy baz, schematów czy ról. Nie są częścią języka SQL, tylko funkcją klienta.
Jak uruchomić skrypt SQL z pliku w psql?
Użyj metapolecenia backslash i z podaną ścieżką do pliku, a psql wykona wszystkie zawarte w nim polecenia. Przydaje się też backslash timing on, aby zmierzyć czas każdego zapytania, oraz plik psqlrc w katalogu domowym, w którym możesz zapisać stałe ustawienia klienta wczytywane przy każdym uruchomieniu.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...