Technologia

PostgreSQL

Najpotężniejsza open-source baza danych. Relacyjna, JSONB, full-text search, PostGIS — robi wszystko.

Czym jest PostgreSQL?

PostgreSQL (Postgres) to zaawansowana, open-source relacyjna baza danych z ponad 35-letnią historią. Jest znana z niezawodności, rozszerzalności i zgodności ze standardami SQL. Postgres obsługuje zarówno dane relacyjne (tabele, JOIN-y) jak i NoSQL (JSONB, arrays, hstore).

PostgreSQL jest bazą danych nr 1 dla startupów, SaaS i enterprise. Używają go Supabase, Neon, Railway, Vercel Postgres, Amazon RDS i tysiące firm na świecie.

Przykłady kodu

Tworzenie tabel i relacji

SQL CREATE TABLE users ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name TEXT NOT NULL, email TEXT UNIQUE NOT NULL, role TEXT CHECK (role IN ('admin', 'user', 'editor')), metadata JSONB DEFAULT '{}', created_at TIMESTAMPTZ DEFAULT now() ); CREATE TABLE orders ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), user_id UUID REFERENCES users(id) ON DELETE CASCADE, total NUMERIC(10,2) NOT NULL, status TEXT DEFAULT 'pending', items JSONB NOT NULL, created_at TIMESTAMPTZ DEFAULT now() ); CREATE INDEX idx_orders_user ON orders(user_id); CREATE INDEX idx_orders_status ON orders(status);

Zaawansowane query

SQL -- Top 10 klientów wg wydatków w ostatnim miesiącu SELECT u.name, u.email, COUNT(o.id) AS order_count, SUM(o.total) AS total_spent, ROUND(AVG(o.total), 2) AS avg_order FROM users u JOIN orders o ON o.user_id = u.id WHERE o.created_at >= now() - INTERVAL '30 days' AND o.status = 'completed' GROUP BY u.id ORDER BY total_spent DESC LIMIT 10;

JSONB — NoSQL w SQL

SQL + JSONB -- Szukaj w JSONB metadata SELECT * FROM users WHERE metadata->>'plan' = 'premium' AND (metadata->'tags') ? 'vip'; -- Aktualizuj zagnieżdżony JSONB UPDATE users SET metadata = jsonb_set( metadata, '{preferences,theme}', '"dark"' ) WHERE id = 'abc-123'; -- Agregacja JSONB array SELECT jsonb_array_elements_text(metadata->'tags') AS tag, COUNT(*) AS count FROM users GROUP BY tag ORDER BY count DESC;

Full-text search

SQL -- Dodaj kolumnę search vector ALTER TABLE articles ADD COLUMN search_vector TSVECTOR; UPDATE articles SET search_vector = to_tsvector('polish', title || ' ' || body); CREATE INDEX idx_search ON articles USING GIN(search_vector); -- Szukaj z rankingiem SELECT title, ts_rank(search_vector, query) AS rank FROM articles, to_tsquery('polish', 'flutter & aplikacja') query WHERE search_vector @@ query ORDER BY rank DESC;

Ocena kompetencji

Relacje / SQL
100%
JSONB / NoSQL
90%
Niezawodność
99%
Skalowalność
85%
Full-text search
82%
Łatwość startu
65%

Co potrafi PostgreSQL

Relacje i JOIN-y

Pełne wsparcie SQL. Foreign keys, constraints, triggers, views, CTEs, window functions.

JSONB

Przechowuj i query'uj dane NoSQL. Indeksy GIN, operatory JSONB, jsonb_path_query.

Full-text search

Wbudowane wyszukiwanie pełnotekstowe. tsvector, tsquery, ranking, stemming po polsku.

PostGIS

Dane geolokalizacyjne. Punkty, polygony, odległości, routing. Standard w GIS.

Row Level Security

Polityki bezpieczeństwa na poziomie wiersza. Idealne do multi-tenant SaaS.

Extensions

pgvector (AI embeddings), pg_cron, pg_stat, timescaledb (time series), Citus (sharding).

Kiedy wybrać PostgreSQL?

Idealny gdy: budujesz SaaS z relacjami między danymi, potrzebujesz transakcji ACID, chcesz JSONB + SQL, budujesz multi-tenant platform, potrzebujesz full-text search.

Nie najlepszy gdy: budujesz prosty MVP i chcesz zero-config (lepiej Firebase), potrzebujesz real-time sync out-of-the-box (lepiej Firestore), budujesz prototyp w weekend.