Hlavní navigace

Novinka v PostgreSQL 9.4 - JSONB

27. 11. 2014 7:57 (aktualizováno) | aristote

(zdroj: http://www.postgresql.org/doc­s/9.4/static/datatype-json.html)

Proč json ?

Data v json notaci je mozne uchovavat dvojim způsobem jako text a jako JSON. Uchování dat ve tvaru json má tu výhodu, že umožňuje uchovávat data v json validovaném formátu, na rozdíl od textu, kde se neprovádí kontrola dat.

Dva typy JSON formátu

Jsou json a jsonb . Ačkoliv mají vstup ten samý, liší se efektivitou. json datové typy uchovávají exaktní kopií vstupního textu, který musí být vždy reparsovaný při jejich vykonávaní. Pokud jsonb data jsou uchovány v dekompozitním bionárním formátutakže jsou pomalejší na vstupu, ale rýchlejší tam, kde je nutné provádět reparsovaní. jsonb taky podporuje indexování, které může mít významnou výhodu.

Co jsonb nedělá :

– neochraňuje white space (znaky jako je mezera, konec řádku, tab …)
- nedrží duplicitní objektové klíče
- nedrží pořadí ukládaní objektových klíčů
- nepodporuje ukládaní v tavru \uXXXX, ale ukládá znaky v ASCII nebo UTF8 znakovém tvaru (je to proto, že data jsou pak rychlej zpracována)

Vstupní syntax JSON a JSONB

-- Primitvní hodnota (number, quoted string, true, false, null)

select '5'::json;

-- Array pro 0 nebo více lementů (elements need not be of same type)
SELECT '[1, 2, "foo", null]'::json;

-- Objektové klíče musí být vždy v úvozovkách
SELECT '{"bar": "baz", "balance": 7.77, "active": false}'::json;

-- Pole a objekty mohou mít vložené prvky libovolně
SELECT '{"foo": [true, "bar"], "tags": {"a": 1, "b": null}}'::json;

Výstupní tvar pro JSON a JSONB

SELECT '{"bar": "baz", "balance": 7.77, "active":false}'::json;
json
-------------------------------------------------
{"bar": "baz", "balance": 7.77, "active":false}
(1 row)

SELECT '{"bar": "baz", "balance": 7.77, "active":false}'::jsonb;
jsonb
--------------------------------------------------
{"bar": "baz", "active": false, "balance": 7.77}
(1 row)

SELECT '{"reading": 1.230e-5}'::json, '{"reading": 1.230e-5}'::jsonb;
json | jsonb
-----------------------+-------------------------
{"reading": 1.230e-5} | {"reading": 0.00001230}
(1 row)

pokračování příště …