X-Git-Url: https://git.8kb.co.uk/?p=postgresql%2Fpg_jsonb_opx;a=blobdiff_plain;f=README.md;h=b1406e3fe0a03b2b9e172f3946c9da130e090940;hp=7933507de7c41d40450f403f6a8087ed5b7b8621;hb=4df8c5cd073dfd908019ebc307918b8e7102e0a6;hpb=b8dfa25546ebb28f797c3504751f4dbec3a79b14 diff --git a/README.md b/README.md index 7933507..b1406e3 100755 --- a/README.md +++ b/README.md @@ -1,123 +1,25 @@ jsonb_opx ========= -Missing operators for jsonb in PostgreSQL 9.4, this may contain some errors and bad form so please test that it suits your requirements before using in any production scenario. +Missing operators for jsonb in PostgreSQL 9.4, this may contain some errors and bad form as it's primarily just experimentation (i'm not a frequent C programmer; but everyone has to start somewhere right?). Please test that it suits your requirements before using in any production scenario. Provides -------- +The following behave like hstore 1.x operators, i.e. without nested jsonb traversal + * deletion using **-** operator * jsonb_delete(jsonb, text) * jsonb_delete(jsonb, text[]) * jsonb_delete(jsonb, jsonb) * concatenation using **||** operator * jsonb_concat(jsonb, jsonb) +* replacement using **=#** operator + * jsonb_replace(jsonb, jsonb) -More detail ------------ -* delete operator **"-"** provided by functions *jsonb_delete(jsonb, text) jsonb_delete(jsonb, text[]) and jsonb_delete(jsonb, jsonb)* - Provides: - jsonb - text - jsonb - text[] - jsonb - jsonb - - Note: When using text type operators on jsonb arrays only elements of type text will be deleted. E.g. - -```sql -TEST=# SELECT '[1, "1", "2", 2]'::jsonb - '2'::text; - ?column? -------------- - [1, "1", 2] -(1 row) - -TEST=# SELECT '[1, "1", "2", 2]'::jsonb - '"2"'::text; - ?column? ------------------- - [1, "1", "2", 2] -(1 row) - -TEST=# SELECT '[1, "1", "2", 2]'::jsonb - array['2']::text[]; - ?column? -------------- - [1, "1", 2] -(1 row) - -TEST=# SELECT '[1, "1", "2", 2]'::jsonb - array['"2"']::text[]; - ?column? ------------------- - [1, "1", "2", 2] -(1 row) - -``` - - More. E.g. - -```sql -TEST=# SELECT '{"a": 1, "b": 2, "c": 3}'::jsonb - 'b'::text; - ?column? ------------------- - {"a": 1, "c": 3} -(1 row) - -TEST=# SELECT '{"a": 1, "b": 2, "c": 3}'::jsonb - ARRAY['a','b']; - ?column? ----------- - {"c": 3} -(1 row) - -TEST=# SELECT '{"a": 1, "b": 2, "c": 3}'::jsonb - '{"a": 4, "b": 2}'::jsonb; - ?column? ------------------- - {"a": 1, "c": 3} -(1 row) - -TEST=# SELECT '{"a": 1, "b": 2, "c": 3, "d": {"a": 4}}'::jsonb - '{"d": {"a": 4}, "b": 2}'::jsonb; - ?column? ------------------- - {"a": 1, "c": 3} -(1 row) - -TEST=# SELECT '{"a": 4, "b": 2, "c": 3, "d": {"a": 4}}'::jsonb - '{"a": 4, "b": 2}'::jsonb; - ?column? -------------------------- - {"c": 3, "d": {"a": 4}} -(1 row) -``` - -* concatenation operator **"||"** provided by function *jsonb_concat(jsonb, jsonb)* - Provides: - jsonb || jsonb - - E.g. - -```sql -TEST=# SELECT '{"a": 1, "b": 2, "c": 3}'::jsonb || '{"a": 4, "b": 2, "d": 4}'::jsonb; - ?column? ----------------------------------- - {"a": 4, "b": 2, "c": 3, "d": 4} -(1 row) - -TEST=# SELECT '["a", "b"]'::jsonb || '["c"]'::jsonb; - ?column? ------------------ - ["a", "b", "c"] -(1 row) - -TEST=# SELECT '[1,2,3]'::jsonb || '[3,4,5]'::jsonb; - ?column? --------------------- - [1, 2, 3, 3, 4, 5] -(1 row) - -TEST=# SELECT '{"a": 1, "b": 2, "c": 3}'::jsonb || '[1,2,3]'::jsonb; - ?column? -------------------------------------- - [{"a": 1, "b": 2, "c": 3}, 1, 2, 3] -(1 row) +The following are intended to eventually function like hstor 2.0 operators -TEST=# SELECT '{"a": 1, "b": 2, "c": 3}'::jsonb || '[1,2,3]'::jsonb || '"a"'::jsonb; - ?column? ------------------------------------------- - [{"a": 1, "b": 2, "c": 3}, 1, 2, 3, "a"] -(1 row) -``` +* deletion at chained path using **#-** operator + jsonb_delete_path(jsonb, text[]) +* replacement at chained path using function + jsonb_replace_path(jsonb, text[], jsonb)