PostgreSQL: wprowadzenie, instalacja i pierwsza baza danych

Kacper Sieradziński
Kacper Sieradziński
14 września 2025SQL4 min czytania

PostgreSQL to jedna z najbardziej dopracowanych baz danych na świecie — wydajna, niezawodna i w pełni zgodna ze standardem SQL. Wyróżnia się tym, że łączy stabilność z ogromnymi możliwościami: od prostych zapytań po zaawansowane funkcje analityczne, indeksy i transakcje ACID. Dlatego używają jej zarówno startupy, jak i duże firmy technologiczne.

Obraz główny PostgreSQL: wprowadzenie, instalacja i pierwsza baza danych

Zapisz się na nasz newsletter

Otrzymuj regularne aktualizacje, specjalne oferty i porady od ekspertów, które pomogą Ci osiągnąć więcej w krótszym czasie.

W tym artykule zobaczysz, jak zainstalować PostgreSQL na Windows, macOS i Linux, utworzyć użytkownika i pierwszą bazę, połączyć się przez konsolę psql lub narzędzie graficzne, a następnie wykonać swoje pierwsze zapytania SELECT. Na koniec znajdziesz zestaw prostych ćwiczeń, dzięki którym od razu zaczniesz działać w praktyce.

Dlaczego warto uczyć się PostgreSQL

PostgreSQL to stabilny, zgodny ze standardem SQL system transakcyjny z silnym naciskiem na spójność danych. Oferuje transakcje ACID, zaawansowane indeksy (B-tree, GIN, GiST, BRIN), widoki materializowane, funkcje okna, CTE i mocne ograniczenia integralności. Dzięki temu nadaje się zarówno do systemów operacyjnych 24/7, jak i analityki.

Jest rozszerzalny: typy JSONB, pełnotekstowe wyszukiwanie, rozszerzenia (np. PostGIS), funkcje w PL/pgSQL i innych językach. Działa na Windows, macOS i Linux, co ułatwia pracę zespołów wieloplatformowych.

Instalacja PostgreSQL na Windows, macOS i Linux

Windows: pobierz instalator ze strony postgresql.org, uruchom, wybierz wersję (np. 16), ustaw hasło dla użytkownika systemowego postgres i zainstaluj pgAdmin. Po instalacji upewnij się, że usługa działa (Services → PostgreSQL) i nasłuchuje na porcie 5432.

macOS: najprościej użyć Postgres.app lub Homebrew: brew install postgresql@16, następnie brew services start postgresql@16. Sprawdź, że psql --version zwraca poprawną wersję i że katalog danych został zainicjalizowany.

Linux: na Debian/Ubuntu użyj apt install postgresql, na Fedora/CentOS/RHEL dnf/yum install postgresql-server i zainicjalizuj bazę (na RHEL/Fedora postgresql-setup --initdb). Uruchom i włącz usługę (systemctl start postgresql, systemctl enable postgresql). Jeśli planujesz połączenia zdalne, skonfiguruj postgresql.conf (listen_addresses) i pg_hba.conf.

MySQL — Jak zacząć? Darmowy e-book

MySQL — Jak zacząć? Darmowy e-book

Praktyczny przewodnik po świecie SQL. Poznaj typy danych, zapytania SELECT, JOIN, funkcje agregujące i nie tylko.

Tworzenie użytkownika i bazy danych

Po instalacji zalecane jest utworzenie oddzielnej roli (użytkownika) i pierwszej bazy. Poniższy przykład tworzy rolę z możliwością logowania, bazę z kodowaniem UTF-8 i przekazuje własność roli.

SQL
1 2 3 4 5 6 7 8 9 10 11 -- Zaloguj się jako superuser (np. postgres) i wykonaj: CREATE ROLE app_user LOGIN PASSWORD 'silne_haslo'; -- alias: CREATE USER CREATE DATABASE app_db OWNER app_user ENCODING 'UTF8' LC_COLLATE 'C' LC_CTYPE 'C' TEMPLATE template0; -- Opcjonalnie: podstawowe uprawnienia po połączeniu do app_db: GRANT CONNECT ON DATABASE app_db TO app_user;

Domyślna metoda uwierzytelniania to SCRAM-SHA-256. Nie cytuj nazw ról, aby uniknąć wrażliwości na wielkość liter. Więcej o uprawnieniach i rolach znajdziesz w: Użytkownicy, role i uprawnienia w PostgreSQL.

Korzystanie z psql i narzędzi graficznych

psql to konsola kliencka. Połącz się: psql -U app_user -d app_db -h localhost -p 5432. Przydatne metakomendy: \l (listuj bazy), \du (role), \dt (tabele), \dn (schematy), \c app_db (przełącz bazę), \? (pomoc). Zmieniaj tryb wyjścia \x on dla szerokich tabel.

GUI: pgAdmin (w zestawie z instalatorem), DBeaver, TablePlus, DataGrip. Do utworzenia połączenia podaj host, port, bazę, użytkownika i metodę SSL. GUI nie zastępuje psql, ale przyspiesza podgląd schematu i wykonywanie prostych zapytań.

Tworzenie pierwszej tabeli i wstawianie danych

Zdefiniuj tabelę z kluczem głównym, ograniczeniami i sensownymi typami danych. Poniżej przykład prostej tabeli klientów.

SQL
1 2 3 4 5 6 7 8 9 10 11 12 -- Połączony jako app_user do app_db: CREATE TABLE customers ( id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, email text NOT NULL UNIQUE CHECK (position('@' IN email) > 1), full_name text NOT NULL, created_at timestamptz NOT NULL DEFAULT now() ); INSERT INTO customers (email, full_name) VALUES ('anna@example.com', 'Anna Kowalska'), ('jan@example.pl', 'Jan Nowak'), ('zoe@example.net', 'Zoe Nowak');

Dobór typów ma znaczenie dla wydajności i walidacji (np. numeric vs integer, timestamptz vs timestamp). Porównanie typów znajdziesz w: Typy danych w SQL: porównanie PostgreSQL i MySQL.

Pierwsze zapytania SELECT i filtrowanie

Zacznij od prostych kwerend z filtrowaniem, sortowaniem i ograniczeniem liczby wierszy. Używaj ILIKE do wyszukiwania bez rozróżniania wielkości liter.

SQL
1 2 3 4 5 6 7 8 9 10 11 12 -- Ostatnie konta z domeną .pl SELECT id, email, created_at FROM customers WHERE email ILIKE '%.pl' ORDER BY created_at DESC LIMIT 5; -- Szybkie agregacje SELECT date_trunc('day', created_at) AS day, count(*) AS customers_per_day FROM customers GROUP BY 1 ORDER BY 1;

Kolejne kroki (JOIN, WHERE, GROUP BY) opisuję tu: Podstawy SQL: SELECT, WHERE, JOIN, GROUP BY.

Typowe błędy po instalacji

psql: command not found – dopisz katalog bin do PATH lub uruchom psql pełną ścieżką. Connection refused – usługa nie działa, zły port, firewall lub listen_addresses nie obejmuje żądanego interfejsu. Password authentication failed – zła rola/hasło, brak uprawnień w pg_hba.conf (użyj host ... scram-sha-256).

FATAL: database "user" does not exist – psql domyślnie łączy bazę o nazwie użytkownika; podaj -d app_db lub utwórz bazę. Permission denied – brak GRANT na schemat/tabelę; przydziel GRANT USAGE ON SCHEMA public TO app_user; GRANT SELECT, INSERT ON TABLE .... Problemy z polskimi znakami – twórz bazy w UTF-8 i ustaw client_encoding = 'UTF8'.

Zanim zaczniesz migracje i testy, skonfiguruj podstawowe kopie zapasowe (pg_dump/pg_restore): Backup i odzyskiwanie danych w PostgreSQL.

Mini zestaw ćwiczeń

  • Utwórz rolę shop_user i bazę shop_db, ustaw hasło i przekaz właścicielstwo roli. Połącz się psql jako shop_user.
  • Zdefiniuj tabele: products(id identity, name text not null, price numeric(10,2) check (price > 0)), orders(id identity, customer_email text not null, created_at timestamptz default now()), order_items(order_id bigint references orders(id), product_id bigint references products(id), qty int check (qty > 0), primary key(order_id, product_id)).
  • Wstaw po kilka rekordów do każdej tabeli (różne ceny, różne daty).
  • Napisz zapytania: 1) produkty droższe niż 100, 2) suma wartości zamówień z ostatnich 7 dni, 3) lista zamówień z łączną kwotą (JOIN + GROUP BY), 4) top 3 produktów po sprzedaży.
  • Zaktualizuj ceny wszystkich produktów o +5% i sprawdź, które przekroczyły 200. Usuń wiersz w order_items i zweryfikuj spójność.
  • Dodaj indeks na orders(created_at) i przetestuj plan zapytania z filtrem daty (EXPLAIN ANALYZE).
Kurs SkumajBazy — Czas w końcu nauczyć się SQLa

Kurs SkumajBazy — Czas w końcu nauczyć się SQLa

Kompleksowy kurs SQL dla programistów, analityków i wszystkich, którzy chcą efektywnie pracować z danymi. Od podstaw do zaawansowanych zapytań.