Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu: Skills Rozpocznij
Sekcja
Administracja Linux

PostgreSQL Kompletny Przewodnik: Instalacja, Konfiguracja i Podstawowe Funkcje

PostgreSQL to jeden z najpotężniejszych dostępnych dzisiaj otwartych systemów zarządzania relacyjnymi bazami danych (RDBMS). Znany z niezawodności, rozszerzalności i zgodności ze standardami SQL, jest zaufany przez deweloperów, inżynierów danych i przedsiębiorstwa na całym świecie do zarządzania dużymi, złożonymi zestawami danych z pewnością. Niezależnie od tego, czy budujesz aplikację internetową, magazyn danych czy backend mikrousług, PostgreSQL zapewnia wydajność i niezawodność, których wymaga Twój projekt.

Ten kompleksowy przewodnik obejmuje wszystko, co musisz wiedzieć: czym jest PostgreSQL, jego wyróżniające się funkcje, jak go zainstalować na Ubuntu i jak wykonywać podstawowe operacje na bazach danych, aby szybko zacząć pracę.

1. Co to jest PostgreSQL?

PostgreSQL — często nazywany "Postgres" — to obiektowo-relacyjny system zarządzania bazą danych (ORDBMS), który rozszerza możliwości tradycyjnych baz danych relacyjnych. W przeciwieństwie do prostszych silników SQL, PostgreSQL obsługuje zaawansowane typy danych (w tym JSON, tablice i hstore), języki proceduralne i funkcje zdefiniowane przez użytkownika, co czyni go odpowiednim dla szerokiego zakresu przypadków użycia — od prostych aplikacji internetowych po złożone obciążenia analityczne.

Po raz pierwszy wydany w 1996 roku i wspierany przez dynamiczną społeczność open-source, PostgreSQL dojrzał do poziomu produkcyjnego silnika bazy danych, który konkuruje bezpośrednio z rozwiązaniami komercyjnymi takimi jak Oracle i Microsoft SQL Server — bez żadnych kosztów licencji.

Dlaczego wybrać PostgreSQL zamiast innych baz danych?

FunkcjaPostgreSQLMySQLSQLite
Zgodność ACID✅ Pełna✅ Częściowa✅ Ograniczona
Obsługa JSON✅ Natywna✅ Podstawowa
Niestandardowe typy danych✅ Tak❌ Nie❌ Nie
Wyszukiwanie pełnotekstowe✅ Wbudowane✅ Podstawowe
Rozszerzalność✅ Wysoka⚠️ Umiarkowana❌ Niska
Współbieżność (MVCC)✅ Tak⚠️ Ograniczona❌ Nie

2. Kluczowe cechy PostgreSQL

Zrozumienie tego, co czyni PostgreSQL wyjątkowym, pomoże Ci w pełni wykorzystać jego potencjał w Twojej infrastrukturze.

2.1. Zaawansowane typy danych

PostgreSQL obsługuje niezwykle szeroki zakres natywnych typów danych, znacznie wykraczający poza to, co oferuje większość baz danych:

  • Typy pierwotne: INTEGER, NUMERIC, VARCHAR, BOOLEAN, DATE, TIMESTAMP
  • Typy strukturalne: Arrays, Composite types, Range types
  • Typy dokumentów: JSON i JSONB (binarny JSON dla szybszych zapytań)
  • Typy sieciowe: INET, CIDR, MACADDR — idealne dla aplikacji związanych z siecią
  • Typy geometryczne: POINT, LINE, POLYGON — przydatne dla aplikacji GIS
  • UUID: Natywna obsługa uniwersalnie unikalnych identyfikatorów
  • Full-Text Search (FTS): Wbudowane typy tsvector i tsquery umożliwiają zaawansowane, świadome języka wyszukiwanie pełnotekstowe bez narzędzi zewnętrznych

Ta wszechstronność oznacza, że możesz modelować praktycznie dowolną strukturę danych ze świata rzeczywistego bezpośrednio w bazie danych.

2.2. Rozszerzalność

PostgreSQL jest zaprojektowany do rozszerzania. Możesz dostosowywać i rozszerzać jego funkcjonalność bez modyfikowania rdzenia silnika:

  • Funkcje niestandardowe i procedury przechowywane: Napisz logikę biznesową bezpośrednio w bazie danych, używając PL/pgSQL, PL/Perl, PL/Python, PL/Tcl, a nawet PL/V8 (JavaScript)
  • Niestandardowe operatory i agregaty: Zdefiniuj własne operatory dostosowane do Twoich typów danych
  • Rozszerzenia: Ekosystem rozszerzeń PostgreSQL jest ogromny. Popularne rozszerzenia obejmują:
PostGIS — zaawansowana obsługa danych geoprzestrzennych
pg_stat_statements — monitorowanie wydajności zapytań
pgcrypto — funkcje kryptograficzne
uuid-ossp — generowanie UUID
TimescaleDB — optymalizacja danych szeregów czasowych

2.3. Współbieżność i kontrola transakcji
PostgreSQL obsługuje jednoczesny dostęp elegancko poprzez Multi-Version Concurrency Control (MVCC):

MVCC: Zamiast blokować wiersze podczas odczytów, PostgreSQL tworzy migawkę danych dla każdej transakcji. Pozwala to czytelnikom i piszącym działać jednocześnie bez blokowania się nawzajem, dramatycznie poprawiając wydajność przy wysokiej współbieżności.
Zgodność ACID: Każda transakcja w PostgreSQL jest w pełni zgodna z ACID:
Atomowość — transakcje albo się całkowicie kończą, albo wcale
Spójność — dane zawsze przechodzą z jednego prawidłowego stanu do drugiego
Izolacja — współbieżne transakcje nie wpływają na siebie nawzajem
Trwałość — zatwierdzone dane przetrwają awarie systemu dzięki Write-Ahead Logging (WAL)
Punkty zapisu: Precyzyjna kontrola transakcji w ramach pojedynczego bloku transakcji
Dwufazowy commit (2PC): Obsługuje transakcje rozproszone na wielu węzłach bazy danych

2.4. Funkcje bezpieczeństwa
PostgreSQL zawiera możliwości bezpieczeństwa klasy korporacyjnej:

Kontrola dostępu oparta na rolach (RBAC) z zarządzaniem uprawnieniami na poziomie szczegółowym
Bezpieczeństwo na poziomie wierszy (RLS) — ograniczenie dostępu do danych na poziomie wiersza dla każdego użytkownika
Szyfrowanie SSL/TLS dla połączeń w tranzycie
Uwierzytelnianie SCRAM-SHA-256 i MD5
pg_hba.conf — elastyczna konfiguracja uwierzytelniania opartego na hoście

2.5. Wysoka dostępność i replikacja

Replikacja strumieniowa: Replikacja w czasie rzeczywistym z serwera głównego na repliki
Replikacja logiczna: Selektywna replikacja określonych tabel lub publikacji
Odzyskiwanie do punktu w czasie (PITR): Przywróć bazę danych do dowolnego konkretnego momentu, używając archiwów WAL
Obsługa trybu failover: Kompatybilne z narzędziami takimi jak Patroni, repmgr i pgBouncer do puli połączeń

3. Instalacja PostgreSQL na Ubuntu
Ta sekcja przeprowadzi Cię przez kompletną, gotową do produkcji instalację PostgreSQL na Ubuntu 22.04 LTS. Te same kroki dotyczą Ubuntu 20.04 z drobnymi zmianami.
> Wymagania wstępne: Serwer z systemem Ubuntu 22.04 LTS z uprawnieniami sudo. Jeśli potrzebujesz niezawodnego środowiska serwera, rozważ VPS Hosting od AlexHost — idealny do uruchamiania obciążeń bazodanowych z gwarantowanymi zasobami i pełnym dostępem root.
Krok 1: Aktualizacja indeksu pakietów
Zawsze zacznij od odświeżenia list pakietów, aby upewnić się, że instalujesz najnowszą dostępną wersję:
sudo apt update && sudo apt upgrade -y
Krok 2: Instalacja PostgreSQL
Zainstaluj PostgreSQL wraz z pakietem postgresql-contrib, który zawiera dodatkowe narzędzia i rozszerzenia:
sudo apt install postgresql postgresql-contrib -y
Instaluje to PostgreSQL 14 (lub najnowszą wersję dostępną w repozytorium Ubuntu). Aby zainstalować określoną wersję (np. PostgreSQL 16) z oficjalnego repozytorium APT PostgreSQL, użyj następującego polecenia:
# Add the PostgreSQL APT repository
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

# Import the signing key
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg

# Update and install
sudo apt update
sudo apt install postgresql-16 -y
Krok 3: Uruchomienie i włączenie usługi PostgreSQL
Po instalacji uruchom usługę i skonfiguruj ją do automatycznego uruchamiania przy starcie systemu:
sudo systemctl start postgresql
sudo systemctl enable postgresql
Krok 4: Weryfikacja instalacji
Potwierdź, że PostgreSQL działa poprawnie:
sudo systemctl status postgresql
Oczekiwane wyjście:
● postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled)
     Active: active (running) since ...
Możesz również sprawdzić zainstalowaną wersję:
psql --version
# Output: psql (PostgreSQL) 16.x
Krok 5: Konfiguracja PostgreSQL dla dostępu zdalnego (opcjonalnie)
Domyślnie PostgreSQL nasłuchuje tylko na localhost. Aby zezwolić na połączenia zdalne (np. z serwera aplikacji), edytuj główny plik konfiguracyjny:
sudo nano /etc/postgresql/16/main/postgresql.conf
Znajdź i zmodyfikuj tę linię:
listen_addresses = 'localhost'
Zmień ją na:
listen_addresses = '*'
Następnie zaktualizuj plik uwierzytelniania opartego na hoście:
sudo nano /etc/postgresql/16/main/pg_hba.conf
Dodaj następującą linię, aby zezwolić na określony zakres IP (zastąp swoim rzeczywistym zakresem IP):
host    all             all             192.168.1.0/24          scram-sha-256
Uruchom ponownie PostgreSQL, aby zastosować zmiany:
sudo systemctl restart postgresql
> Uwaga dotycząca bezpieczeństwa: Zawsze ogranicz dostęp zdalny do znanych adresów IP i upewnij się, że zapora sieciowa (UFW lub iptables) jest odpowiednio skonfigurowana. Połącz serwer bazy danych z Certyfikatem SSL, aby zaszyfrować wszystkie dane przesyłane.
4. Podstawowe użytkowanie PostgreSQL
Teraz, gdy PostgreSQL jest zainstalowany, przejdziemy przez podstawowe operacje, które każdy administrator i deweloper powinien znać.
Krok 1: Dostęp do powłoki PostgreSQL
PostgreSQL tworzy domyślnego użytkownika systemowego o nazwie postgres podczas instalacji. Przełącz się na tego użytkownika i otwórz interaktywną powłokę:
sudo -i -u postgres
psql
Powinieneś zobaczyć monit PostgreSQL:
postgres=#
Alternatywnie możesz uzyskać dostęp do powłoki bezpośrednio bez przełączania użytkowników:
sudo -u postgres psql
Krok 2: Utwórz bazę danych
Utwórz nową bazę danych dla swojej aplikacji:
CREATE DATABASE mydatabase;
Sprawdź, czy została utworzona:
l
To wyświetla wszystkie bazy danych na serwerze.
Krok 3: Utwórz użytkownika (rolę)
Utwórz dedykowanego użytkownika bazy danych z bezpiecznym hasłem:
CREATE USER myuser WITH PASSWORD 'StrongP@ssw0rd!';
Najlepsza praktyka: unikaj używania domyślnego użytkownika postgres superuser do połączeń aplikacji. Zawsze twórz dedykowaną rolę z minimalnymi uprawnieniami.
Krok 4: Przyznaj uprawnienia
Przyznaj nowemu użytkownikowi pełny dostęp do bazy danych:
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;
Aby uzyskać bardziej szczegółową kontrolę, możesz przyznać określone uprawnienia dla poszczególnych schematów i tabel:
-- Connect to the database first
c mydatabase

-- Grant usage on the public schema
GRANT USAGE ON SCHEMA public TO myuser;

-- Grant privileges on all existing tables
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO myuser;

-- Ensure future tables are also accessible
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO myuser;
Krok 5: Połącz się z bazą danych jako nowy użytkownik
Zamknij bieżącą sesję i ponownie połącz się jako nowy użytkownik:
q
Następnie połącz się bezpośrednio:
psql -U myuser -d mydatabase -h localhost
Krok 6: Utwórz tabele i wstaw dane
Po połączeniu utwórz swoją pierwszą tabelę:
CREATE TABLE employees (
    id          SERIAL PRIMARY KEY,
    first_name  VARCHAR(50) NOT NULL,
    last_name   VARCHAR(50) NOT NULL,
    email       VARCHAR(100) UNIQUE NOT NULL,
    department  VARCHAR(50),
    salary      NUMERIC(10, 2),
    hired_at    TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Wstaw kilka rekordów:
INSERT INTO employees (first_name, last_name, email, department, salary)
VALUES
    ('Alice', 'Johnson', 'alice@example.com', 'Engineering', 85000.00),
    ('Bob', 'Smith', 'bob@example.com', 'Marketing', 72000.00),
    ('Carol', 'Williams', 'carol@example.com', 'Engineering', 91000.00);
Zapytaj dane:
SELECT first_name, last_name, department, salary
FROM employees
WHERE department = 'Engineering'
ORDER BY salary DESC;
Krok 7: Odwołanie do podstawowych poleceń psql




Polecenie
Opis




l
Wyświetl wszystkie bazy danych


c dbname
Połącz się z bazą danych


dt
Wyświetl wszystkie tabele w bieżącej bazie danych


d tablename
Opisz strukturę tabeli


du
Wyświetl wszystkich użytkowników/role


i file.sql
Wykonaj SQL z pliku


timing
Przełącz wyświetlanie czasu wykonania zapytania


q
Zamknij psql


?
Pomoc dla poleceń psql


h
Pomoc dla poleceń SQL




5. Podstawy strojenia wydajności PostgreSQL
Domyślna instalacja PostgreSQL jest konserwatywna w użyciu zasobów. W środowiskach produkcyjnych strojenie konfiguracji znacznie poprawia wydajność.
Kluczowe parametry w postgresql.conf
sudo nano /etc/postgresql/16/main/postgresql.conf




Parameter
Domyślnie
Rekomendowane (serwer z 8GB RAM)




shared_buffers
128MB
2GB (25% RAM)


effective_cache_size
4GB
6GB (75% RAM)


work_mem
4MB
64MB


maintenance_work_mem
64MB
512MB


max_connections
100
200 (użyj pgBouncer dla więcej)


wal_buffers
-1 (auto)
64MB


checkpoint_completion_target
0.9
0.9




Zastosuj zmiany poprzez ponowne uruchomienie usługi:
sudo systemctl restart postgresql
Najlepsze praktyki indeksowania
Indeksy są krytyczne dla wydajności zapytań:
-- B-tree index (default, for equality and range queries)
CREATE INDEX idx_employees_department ON employees(department);

-- Partial index (index only a subset of rows)
CREATE INDEX idx_high_earners ON employees(salary) WHERE salary > 80000;

-- Composite index (for multi-column queries)
CREATE INDEX idx_dept_salary ON employees(department, salary DESC);

-- GIN index (for full-text search and JSONB)
CREATE INDEX idx_fts ON articles USING GIN(to_tsvector('english', content));
6. Kopia zapasowa i odzyskiwanie
Ochrona danych jest niezbędna. PostgreSQL zapewnia solidne wbudowane narzędzia do tworzenia kopii zapasowych i odzyskiwania.
Logiczna kopia zapasowa z pg_dump
# Backup a single database
pg_dump -U postgres -d mydatabase -F c -f /backups/mydatabase_$(date +%Y%m%d).dump

# Backup all databases
pg_dumpall -U postgres > /backups/all_databases_$(date +%Y%m%d).sql
Przywracanie z kopii zapasowej
# Restore a custom-format dump
pg_restore -U postgres -d mydatabase -F c /backups/mydatabase_20240101.dump

# Restore from SQL file
psql -U postgres -d mydatabase < /backups/all_databases_20240101.sql
Zautomatyzowany skrypt kopii zapasowej
#!/bin/bash
BACKUP_DIR="/var/backups/postgresql"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="mydatabase"

mkdir -p "$BACKUP_DIR"
pg_dump -U postgres -F c -d "$DB_NAME" -f "$BACKUP_DIR/${DB_NAME}_${DATE}.dump"

# Retain only the last 7 days of backups
find "$BACKUP_DIR" -name "*.dump" -mtime +7 -delete

echo "Backup completed: ${DB_NAME}_${DATE}.dump"
Dodaj to do cron dla codziennych zautomatyzowanych kopii zapasowych:
crontab -e
# Add: 0 2 * * * /usr/local/bin/pg_backup.sh >> /var/log/pg_backup.log 2>&1
7. Hosting PostgreSQL: Wybór odpowiedniej infrastruktury
Wydajność i niezawodność wdrożenia PostgreSQL zależą w dużej mierze od podstawowej infrastruktury. Oto najlepsze opcje hostingu w zależności od Twojego obciążenia:
Do tworzenia i małych aplikacji
Hosting współdzielony zapewnia niedrogie wejście dla małych projektów. Jednak w przypadku aplikacji intensywnie korzystających z baz danych zdecydowanie zalecane są dedykowane zasoby.
Do produkcyjnych aplikacji internetowych
Plan VPS Hosting zapewnia dedykowany CPU i RAM, pełny dostęp root oraz możliwość dostrojenia parametrów konfiguracji PostgreSQL — niezbędne dla wydajności bazy danych na poziomie produkcji. Plany VPS AlexHost są dostępne z magazynem NVMe SSD, który dramatycznie zmniejsza opóźnienie I/O PostgreSQL.
Jeśli wolisz zarządzane doświadczenie panelu sterowania, VPS z cPanel upraszcza zarządzanie serwerem, jednocześnie dając Ci dostęp do instancji PostgreSQL.
Do obciążeń o dużym ruchu i przedsiębiorstwa
Serwery dedykowane od AlexHost zapewniają maksymalną wydajność bez dzielenia zasobów. Jest to idealny wybór dla dużych wdrożeń PostgreSQL obsługujących miliony transakcji dziennie, złożone zapytania analityczne lub konfiguracje replikacji o wysokiej dostępności.
Do obciążeń AI i Machine Learning
Jeśli używasz PostgreSQL wraz z potokami machine learning (np. z pgvector do wyszukiwania podobieństwa wektorów), GPU Hosting od AlexHost oferuje moc obliczeniową potrzebną do przetwarzania danych napędzanego sztuczną inteligencją.
8. Security Hardening Checklist
Przed wdrożeniem PostgreSQL w produkcji, przejdź przez tę listę kontrolną bezpieczeństwa:

[ ] Zmień domyślne postgres hasło: ALTER USER postgres WITH PASSWORD 'NewStrongPassword!';
  • [ ] Wyłącz dostęp zdalny dla superużytkownika w pg_hba.conf
  • [ ] Używaj dedykowanych ról z minimalnymi uprawnieniami dla każdej aplikacji
  • [ ] Włącz połączenia SSL w postgresql.conf: ssl = on
  • [ ] Skonfiguruj reguły zapory, aby ograniczyć port 5432 tylko do znanych adresów IP
  • [ ] Włącz Row-Level Security (RLS) dla aplikacji wielodostępnych
  • [ ] Regularnie audytuj uprawnienia użytkowników: du i dp
  • [ ] Aktualizuj PostgreSQL, aby otrzymywać poprawki bezpieczeństwa
  • [ ] Monitoruj logi w /var/log/postgresql/ w poszukiwaniu podejrzanej aktywności
  • [ ] Wdrażaj automatyczne kopie zapasowe z przechowywaniem poza siedzibą
  • Podsumowanie

    PostgreSQL to światowej klasy, otwartoźródłowy system zarządzania bazami danych, który łączy niezawodność oprogramowania klasy enterprise z elastycznością platformy otwartej. Od zaawansowanych typów danych i modelu współbieżności MVCC po bogatą ekosystem rozszerzeń i solidne funkcje bezpieczeństwa, PostgreSQL został zbudowany do obsługi najbardziej wymagających wyzwań zarządzania danymi.

    Postępując zgodnie z tym przewodnikiem, nauczyłeś się:

    • Instalować i konfigurować PostgreSQL na Ubuntu
    • Tworzyć bazy danych, użytkowników i zarządzać uprawnieniami
    • Wykonywać podstawowe operacje CRUD
    • Dostrajać wydajność dla obciążeń produkcyjnych
    • Wdrażać solidną strategię kopii zapasowych i odzyskiwania
    • Zabezpieczać instancję PostgreSQL przed powszechnymi zagrożeniami

    Następnym krokiem jest wybór odpowiedniej infrastruktury do hostowania bazy danych. Niezależnie od tego, czy potrzebujesz ekonomicznego rozwiązania VPS Hosting czy wysokowydajnego Dedicated Server dla obciążeń klasy enterprise, AlexHost zapewnia niezawodną infrastrukturę o wysokiej wydajności, którą zasługuje Twoje wdrożenie PostgreSQL.