CodeGym /Kursy /SQL SELF /Wprowadzenie do PL/pgSQL

Wprowadzenie do PL/pgSQL

SQL SELF
Poziom 49, Lekcja 0
Dostępny

PostgreSQL potrafi "gadać" nie tylko w SQL! Poznaj: PL/pgSQL (Procedural Language/PostgreSQL Structured Query Language), proceduralny język programowania, który jest wbudowany w PostgreSQL. Został stworzony, żeby ułatwić wykonywanie skomplikowanych operacji z użyciem zapytań SQL i struktur sterujących, takich jak warunki (IF, CASE) i pętle (LOOP, FOR, WHILE).

PL/pgSQL i SQL — to jak zautomatyzowana linia montażowa i zwykłe "ręczne" narzędzie, na przykład młotek. Tak jak młotek, SQL to narzędzie niezawodne. Tylko że za każdym razem musisz samemu zamachnąć się i uderzyć. A PL/pgSQL — to już automatyczna linia montażowa: raz ustawiasz, co i jak ma być zrobione, a potem wszystko działa samo — wykonuje polecenia, zapamiętuje, sprawdza, jeśli coś pójdzie nie tak, i spokojnie leci dalej. Po co samemu wbijać każdy gwóźdź, skoro można tylko patrzeć, jak wszystko robi się samo? No czy to nie marzenie?

Porównanie PL/pgSQL ze zwykłymi zapytaniami SQL

Sprawdźmy, czym PL/pgSQL różni się od prostych zapytań SQL.

SQL sprawdza się świetnie, gdy musisz wykonać jedno konkretne zadanie: na przykład wybrać wszystkich studentów z tabeli albo dodać nowy wiersz. Ale jak tylko pojawia się logika "jeśli to, to tamto" albo trzeba powtarzać te same czynności, SQL zaczyna mieć pod górkę.

Na przykład wyobraź sobie, że musisz:

  1. Sprawdzić, czy już jest wpis o studencie w tabeli.
  2. Jeśli wpis jest — zaktualizować dane.
  3. Jeśli wpisu nie ma — dodać nowy wpis.

Przy użyciu zwykłego SQL musiałbyś napisać kilka zapytań i obsłużyć wynik po stronie klienta. Z PL/pgSQL wszystko to możesz zamknąć w jednej procedurze, która wykona się po stronie bazy danych.

PL/pgSQL świetnie sprawdza się w bardziej złożonych projektach. Pozwala na:

  • przechowywanie wyników pośrednich w zmiennych;
  • obsługę błędów, żeby baza danych nie "padła" przy niespodziankach;
  • używanie pętli i warunków do realizacji skomplikowanych algorytmów.

Zastosowania PL/pgSQL

PL/pgSQL bardzo często używa się w takich sytuacjach:

  1. Automatyzacja zadań. Na przykład automatyczne tworzenie wpisów w dzienniku (log) przy każdej aktualizacji danych.

  2. Logika biznesowa. Masz zasadę: każdy student, który ma więcej niż 5 nieobecności, powinien być automatycznie oznaczony jako "nieaktywny". Czemu by nie wrzucić tej reguły do funkcji PL/pgSQL?

  3. Analityka i raporty. Zamiast przerzucać dane między bazą a aplikacją kliencką, możesz je agregować po stronie serwera.

  4. Triggery. PL/pgSQL służy do pisania triggerów, które automatycznie wykonują akcje przy wstawianiu, aktualizacji lub usuwaniu danych.

Przykład użycia PL/pgSQL

Oto przykład funkcji, która przyjmuje dwie liczby, dodaje je i zwraca wynik:

CREATE FUNCTION add_numbers(a INT, b INT) RETURNS INT AS $$
BEGIN
    RETURN a + b;
END;
$$ LANGUAGE plpgsql;

Wyjaśnienie:

  • CREATE FUNCTION add_numbers(a INT, b INT) — tworzymy funkcję o nazwie add_numbers, która przyjmuje dwa argumenty typu INT (liczba całkowita).
  • RETURNS INT — wskazuje, że funkcja zwraca liczbę całkowitą.
  • BEGIN ... END — to główny blok instrukcji, gdzie dzieje się logika funkcji.
  • RETURN a + b; — wynik dodawania jest zwracany.

Żeby wywołać tę funkcję, używasz zwykłego zapytania SQL:

SELECT add_numbers(10, 20);

Wynik: 30.

Pułapki i ograniczenia

PL/pgSQL to potężne narzędzie, ale trzeba z nim uważać:

  • Wydajność: zbyt skomplikowane funkcje mogą spowolnić bazę. Zawsze testuj i optymalizuj.
  • Testowanie: błędy w funkcjach mogą być niewidoczne, dopóki ich nie wywołasz. Nie zapomnij o testach!
  • Czytelność: duże funkcje i procedury ze skomplikowaną logiką mogą być trudne do ogarnięcia. Staraj się pisać kod, który zrozumiesz za miesiąc.

Teraz, kiedy już trochę wiesz, czym jest PL/pgSQL, pogadamy dalej o jego składni i podstawowych możliwościach. Nauczymy się tworzyć bloki kodu, deklarować zmienne i pracować z typami danych w kolejnych wykładach. Do przodu, czas na programowanie po stronie bazy danych!

2
Zadanie
SQL SELF, poziom 49, lekcja 0
Niedostępne
Tworzenie prostej funkcji dodawania
Tworzenie prostej funkcji dodawania
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION