PostgreSQL i MySQL to dwie najpopularniejsze otwarte relacyjne bazy danych. PostgreSQL ma bogatszy zestaw typów (np. jsonb), rozszerzenia (PostGIS, pgvector) i liberalną licencję, a MySQL jest prostszy i bardzo często spotykany w świecie PHP i hostingu. Do nowego projektu wybierz tę bazę, którą dobrze wspiera Twój framework, a bez ograniczeń sięgnij po PostgreSQL.Obie bazy rozwiązują ten sam problem: przechowują dane w tabelach, łączą je relacjami i obsługują zapytania w SQL. Dla początkującego różnica bywa mniejsza, niż sugerują internetowe spory, ale istnieją konkretne rzeczy, które warto wiedzieć przed wyborem. Poniżej porównujemy je pod względem wersji, składni, możliwości i zastosowań. Dane o wersjach i licencjach sprawdziliśmy na oficjalnych stronach, a przykładów SQL nie uruchamialiśmy, więc traktuj je jako ilustrację składni.
Co mają ze sobą wspólnego PostgreSQL i MySQL?
Obie to relacyjne bazy danych, które:
- przechowują dane w tabelach z kluczami głównymi i obcymi,
- obsługują zapytania SQL, w tym JOIN-y (o których piszemy w artykule o relacjach i JOIN-ach w SQL),
- zapewniają transakcje zgodne z ACID (w MySQL dzięki silnikowi InnoDB, który według dokumentacji MySQL 8.4 jest domyślny),
- są dostępne za darmo jako oprogramowanie open source.
Jeśli dopiero porządkujesz wiedzę o tym, czym są bazy relacyjne i nierelacyjne, zacznij od artykułu o relacyjnych i nierelacyjnych bazach danych.
Które wersje PostgreSQL i MySQL są dziś wspierane?
Stan na 11 listopada 2026, według oficjalnych stron projektów.
PostgreSQL wydaje nową wersję główną raz w roku i wspiera każdą przez pięć lat. Aktualnie wspierane są wersje od 14 do 18. Wersja 18 wyszła 25 września 2025 roku, a PostgreSQL 14 kończy wsparcie 12 listopada 2026. Wersja 19 jest w fazie kandydata do wydania (RC 1 z 15 października 2026).
MySQL ma dwa tory wydań: innowacyjny i LTS (długoterminowe wsparcie). Według komunikatu Oracle MySQL 8.0 przeszedł 21 kwietnia 2026 do tzw. Sustaining Support, a użytkownikom zaleca się 8.4 LTS lub 9.7 LTS. Jeśli utrzymujesz projekt na MySQL 8.0, zaplanuj aktualizację.
Jakie są różnice w składni SQL?
Podstawy (SELECT, WHERE, JOIN, GROUP BY) wyglądają tak samo, a różnice dotyczą szczegółów. Tabela poniżej pochodzi z dokumentacji i naszej wiedzy, nie z uruchomionych testów:
| Zagadnienie | PostgreSQL | MySQL |
|---|---|---|
| Automatyczny identyfikator | GENERATED ALWAYS AS IDENTITY | AUTO_INCREMENT |
| Zwrócenie danych po zapisie | INSERT ... RETURNING id | brak RETURNING w poleceniu INSERT w dokumentacji 8.4, identyfikator pobiera się osobno (LAST_INSERT_ID()) |
| Cudzysłów wokół nazw | "nazwa" (standard SQL) | `nazwa` (backtick) |
| Wielkość liter w tekście | porównania rozróżniają wielkość liter | domyślne porównania zwykle jej nie rozróżniają |
Przykład tego samego zapisu w obu bazach:
-- PostgreSQL
CREATE TABLE users (
id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
email TEXT NOT NULL
);
INSERT INTO users (email) VALUES ('anna@example.com') RETURNING id;
-- MySQL
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) NOT NULL
);
INSERT INTO users (email) VALUES ('anna@example.com');
SELECT LAST_INSERT_ID();
Ostatni wiersz tabeli bywa źródłem błędów: ten sam WHERE email = 'Anna@example.com' może zwrócić wynik w jednej bazie, a w drugiej nie. Dlatego testy warto uruchamiać na tej samej bazie, co produkcja.
Czym PostgreSQL wyróżnia się na tle MySQL?
Jak PostgreSQL obsługuje JSON?
PostgreSQL ma typ jsonb, który przechowuje JSON w formie binarnej i pozwala go indeksować. Dokumentacja opisuje osobno m.in. indeksowanie jsonb, zawieranie i ścieżki jsonpath. Dzięki temu PostgreSQL bywa wybierany, gdy część danych ma zmienny kształt, a reszta pozostaje relacyjna. MySQL też ma typ JSON, więc samo przechowywanie JSON-a nie przesądza o wyborze. Porównując obie bazy pod kątem JSON-a, sprawdź w dokumentacji, jakie operatory i indeksy są Ci potrzebne (nie testowaliśmy tego).
Do czego służą rozszerzenia PostgreSQL?
Rozszerzenia dodają nowe możliwości bez zmiany samej bazy. Dwa najczęściej wymieniane to PostGIS (dane geograficzne) i pgvector (wektory do wyszukiwania semantycznego). O wektorach piszemy w artykule o bazach wektorowych i RAG w Pythonie. Jeśli potrzebujesz zapytań geograficznych albo wektorów w tej samej bazie co reszta danych, PostgreSQL jest naturalnym wyborem.
Dlaczego PostgreSQL ma prostszą licencję?
PostgreSQL działa na licencji PostgreSQL, liberalnej i podobnej do BSD lub MIT. Nie nakłada ograniczeń na to, jak z niego korzystasz w produkcie komercyjnym. MySQL jest wydawany na licencji GPL v2 albo na licencji komercyjnej Oracle. Dla zwykłej aplikacji webowej to bez znaczenia, ale gdy wbudowujesz bazę w sprzedawany produkt, różnica ma znaczenie prawne.
Kiedy MySQL jest dobrym wyborem?
MySQL jest bardzo rozpowszechniony w ekosystemie PHP i na hostingach współdzielonych. Jeśli budujesz aplikację w typowym stosie PHP z Laravelem, najczęściej trafisz na niego (z MySQL uczymy się też w naszej ścieżce PHP). Ma dużo materiałów, narzędzi i gotowych konfiguracji. Warto też wiedzieć o MariaDB, czyli rozwidleniu (forku) MySQL, które w wielu miejscach działa jako zamiennik.
Którą bazę wybrać do aplikacji webowej, Laravela lub Django?
Poniższa ściąga to punkt wyjścia:
| Sytuacja | Sensowny wybór |
|---|---|
| uczysz się SQL-a od zera | dowolna, zacznij od tej, którą używa Twój framework |
| projekt w Laravelu na hostingu współdzielonym | MySQL (lub MariaDB) |
| projekt w Django lub FastAPI | PostgreSQL (częsty wybór w tych projektach, ale oba frameworki obsługują też inne bazy) |
| potrzebujesz danych geograficznych lub wektorów | PostgreSQL (PostGIS, pgvector) |
| dane częściowo ze zmiennym kształtem (JSON) | PostgreSQL (jsonb) |
| dostawca narzuca bazę lub masz już istniejący projekt | ta, która już jest, nie migruj bez powodu |
Pracy z bazami z poziomu kodu uczymy w ścieżce Python, w module o zaawansowanych bazach danych z ORM-em.
Czy trudno przejść z jednej bazy na drugą?
Dla prostych aplikacji, które używają ORM-a, migracja bywa stosunkowo bezbolesna, bo ORM ukrywa część różnic w składni. Najwięcej problemów sprawiają natywne zapytania SQL, funkcje specyficzne dla bazy i różnice w porównywaniu tekstu. Dlatego warto od początku trzymać się standardowego SQL-a tam, gdzie to możliwe.
Uwaga mentora: dla osoby, która uczy się SQL-a, różnica między PostgreSQL a MySQL jest mniejsza, niż wygląda. JOIN-y, GROUP BY i klucze obce działają tak samo, więc zacznij od tej bazy, którą używa Twój framework (MySQL w typowym PHP, PostgreSQL w wielu projektach Django), i nie trać tygodni na wybór.


