JSONB a JSON: kiedy używać którego
Wybierać między JSON (tekst, zachowuje białe znaki) a JSONB (format binarny, indeksowalny, z usuniętymi duplikatami kluczy), aby dobrać właściwy sposób przechowywania
JSONB a JSON: kiedy używać którego to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.
Dwa typy JSON w PostgreSQL
JSON— przechowuje dokładny tekst przekazany podczas zapisuJSONB— rozłożony format binarny z usuniętymi duplikatami kluczy, obsługujący indeksowanie
JSON: przechowywanie tekstu
JSON zachowuje białe znaki, kolejność kluczy i zduplikowane klucze. Przy każdym odczycie jest ponownie analizowany. Nie obsługuje indeksowania GIN. W przypadku nowego kodu niemal nigdy nie jest właściwym wyborem.
INSERT INTO docs (data) VALUES ('{"a": 1, "a": 2}'::JSON);
SELECT data->'a' FROM docs; -- whatever the parser picksJSONB: binarny i indeksowalny
JSONB:
- Przechowywany w rozłożonej postaci → nie wymaga ponownej analizy przy odczycie
- Zduplikowane klucze są scalane (wygrywa ostatni)
- Kolejność kluczy nie jest zachowywana
- Obsługuje indeksowanie GIN
- Obsługuje rozbudowane operatory ścieżek
Przykład JSONB
Prosta tabela zdarzeń:
CREATE TABLE events (
id BIGSERIAL PRIMARY KEY,
ts TIMESTAMPTZ NOT NULL DEFAULT NOW(),
data JSONB NOT NULL
);
INSERT INTO events (data) VALUES
('{"type":"login","user_id":42,"ip":"1.2.3.4"}');Operatory ścieżek
JSONB udostępnia rozbudowane operatory (omówione w następnej lekcji):
SELECT data->'user_id' FROM events; -- → JSONB
SELECT data->>'user_id' FROM events; -- → TEXT
SELECT data #>> '{user,name}' FROM events; -- nested text pathZawieranie
Najbardziej użyteczny operator JSONB: @> (zawiera).
SELECT * FROM events WHERE data @> '{"type":"login"}';
-- Combined with a GIN index, this is fast even on billions of rows.Równość wartości JSONB
Dwie wartości JSONB są równe, jeśli ich zawartość jest taka sama — kolejność kluczy nie ma znaczenia:
SELECT '{"a":1,"b":2}'::JSONB = '{"b":2,"a":1}'::JSONB; -- TRUERzutowanie między typami
Można swobodnie rzutować:
SELECT '{"a":1}'::JSONB->'a'; -- 1 (as JSONB)
SELECT ('{"a":1}'::JSONB)->>'a'; -- '1' (as TEXT)
SELECT ('{"a":1}'::JSONB)->'a'::INT; -- 1 (as INT after extraction)Kiedy NIE używać JSONB
Jeśli dane mają stałą strukturę, należy użyć rzeczywistych kolumn:
- Szybsze zapytania (bez analizy dokumentu dla każdego wiersza)
- Silne typowanie i ograniczenia
- Mniejsze zużycie miejsca
- Lepsze statystyki
JSONB sprawdza się najlepiej, gdy struktura danych jest zmienna lub szybko ewoluuje.
Modelowanie hybrydowe
Najlepsza praktyka: uporządkowane kolumny dla stabilnych pól, JSONB dla zmiennych danych dodatkowych:
CREATE TABLE events (
id BIGSERIAL PRIMARY KEY,
ts TIMESTAMPTZ NOT NULL,
event_type TEXT NOT NULL,
user_id BIGINT,
extra JSONB NOT NULL DEFAULT '{}'::JSONB
);Walidacja
JSONB przechowuje dowolny prawidłowy JSON. Aby wymusić ograniczenia strukturalne, należy użyć ograniczeń CHECK lub egzekwować schemat w warstwie aplikacji:
ALTER TABLE events
ADD CONSTRAINT data_has_type CHECK (data ? 'type');Podsumowanie
JSONB > JSON w niemal wszystkich zastosowaniach produkcyjnych.
- JSONB: binarny, indeksowany, szybkie ścieżki dostępu
- JSON: tylko tekstowy zapis i odczyt bez zmian
- JSONB należy stosować dla zmiennych struktur, a rzeczywiste kolumny dla struktur stałych
Szybkie sprawdzenie
Projektują Państwo nową tabelę do przechowywania dokumentów JSON przesyłanych przez użytkowników, które będą wyszukiwane według zawartości. JSON czy JSONB?
Często zadawane pytania
Czy lekcja „JSONB a JSON: kiedy używać którego” jest bezpłatna?
Tak — pełny tekst „JSONB a JSON: kiedy używać którego” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „JSONB a JSON: kiedy używać którego”?
Wybierać między JSON (tekst, zachowuje białe znaki) a JSONB (format binarny, indeksowalny, z usuniętymi duplikatami kluczy), aby dobrać właściwy sposób przechowywania Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć SQL Academy?
Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „JSONB a JSON: kiedy używać którego”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?
Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- JSONB a JSON: kiedy używać którego
- Operatory ścieżek: -> ->> @>
- Indeksowanie JSONB za pomocą GIN
- Modelowanie: kiedy JSONB wygrywa z normalizacją