PostgreSQL підтримує роботу з типом даних JSON і має кілька функцій та операцій для роботи з JSON-даними. Ось кілька прикладів того, що можна зробити з JSON в PostgreSQL:
SELECT ’{"name": "John", "age": 30}’::json AS person;
Або для масивів:
SELECT ’[1, 2, 3]’::json AS numbers;
->
:
SELECT ’{"name": "John", "age": 30}’::json->’name’ AS person_name;
Це поверне значення "John".
SELECT * FROM table_name WHERE json_column->>’key’ = ’value’;
jsonb_set
:
UPDATE table_name SET json_column = jsonb_set(json_column, ’{key}’, ’"new_value"’::jsonb);
json_array_elements
можна розгорнути JSON-масив та витягти його елементи:
SELECT json_array_elements(’[1, 2, 3]’::json) AS number;
SELECT AVG((json_column->>’age’)::int) AS average_age FROM table_name;
CASE
:
SELECT
CASE WHEN json_column->>’status’ = ’active’ THEN ’Active’
WHEN json_column->>’status’ = ’inactive’ THEN ’Inactive’
ELSE ’Unknown’ END AS status_description
FROM table_name;
jsonb_delete
:
UPDATE table_name
SET json_column = jsonb_delete(json_column, ’{key}’);
@>
або ?
для пошуку в JSON-даних:
SELECT * FROM table_name WHERE json_column @> ’{"key": "value"}’;
Або за допомогою оператора ?
:
SELECT * FROM table_name WHERE json_column->’key’ ? ’value’;
||
:
SELECT ’{"name": "John"}’::json || ’{"age": 30}’::json AS merged_json;
to_json
для перетворення рядків у JSON-об'єкти:
SELECT to_json(’Hello, world!’::text) AS json_text;
json_agg
для створення JSON-масивів з рядків:
SELECT json_agg(row_to_json(table_name)) AS json_array FROM table_name;
jsonb_object_keys
для отримання ключів та jsonb_each
для отримання ключів та значень:
-- Отримання ключів
SELECT jsonb_object_keys(’{"name": "John", "age": 30}’::jsonb) AS keys;
-- Отримання ключів та значень
SELECT * FROM jsonb_each(’{"name": "John", "age": 30}’::jsonb);
jsonb_array_elements
та jsonb_array_length
, для роботи з масивами в JSON-даних:
-- Розгортання масиву
SELECT jsonb_array_elements(’[1, 2, 3]’::jsonb) AS element;
-- Отримання довжини масиву
SELECT jsonb_array_length(’[1, 2, 3]’::jsonb) AS array_length;
row_to_json
та json_agg
для генерації JSON з рядків реляційної таблиці:
-- Генерація JSON з рядка таблиці
SELECT row_to_json(table_name) AS json_data FROM table_name;
-- Генерація JSON-масиву з рядків таблиці
SELECT json_agg(row_to_json(table_name)) AS json_array FROM table_name;
jsonb_array_elements_text
для застосування фільтрів до масивів в JSON-даних:
-- Вибір елементів, які починаються на "A"
SELECT * FROM table_name
WHERE json_column->’array_field’ @> ’["A"]’::jsonb;
-
для вилучення ключів:-
:
SELECT ’{"name": "John", "age": 30}’::jsonb - ’age’ AS json_without_age;
jsonb_set
для збільшення числового значення в JSON-даних:
UPDATE table_name
SET json_column = jsonb_set(json_column, ’{count}’, (json_column->>’count’)::int + 1)::jsonb
WHERE condition;
SELECT json_column->>’category’ AS category, COUNT(*) AS count
FROM table_name
GROUP BY category;
jsonb_pretty
для форматування JSON:jsonb_pretty
дозволяє красиво форматувати JSON для зручного читання:
SELECT jsonb_pretty(’{"name": "John", "age": 30}’::jsonb) AS pretty_json;
jsonb_build_object
для конвертації JSON в рядки:
SELECT jsonb_build_object(’key’, ’value’) AS json_string;
UPDATE table_name
SET json_column = json_column || ’{"status": "updated"}’::jsonb
WHERE condition;
->
для доступу до вкладених JSON-структур та виконання операцій в них:
SELECT json_column->’details’->>’attribute’ AS nested_attribute
FROM table_name;
jsonb_strip_nulls
:jsonb_strip_nulls
дозволяє вилучати всі значення null
з JSON-структури:
SELECT jsonb_strip_nulls(’{"name": "John", "age": null}’::jsonb) AS stripped_json;
SELECT * FROM table_name
WHERE json_column = ’{"name": "John", "age": 30}’::jsonb;
jsonb_extract_path
для отримання конкретного шляху:jsonb_extract_path
дозволяє отримати значення за конкретним шляхом в JSON-даних:
SELECT jsonb_extract_path(’{"user": {"name": "Alice"}}’::jsonb, ’user’, ’name’) AS user_name;
CREATE INDEX idx_json_column ON table_name USING gin(json_column);
json_object_agg
:json_object_agg
для групування рядків у вигляді JSON-об'єктів:
SELECT json_object_agg(id, name) AS id_name_mapping FROM table_name;
jsonb_path_query
для пошуку в JSONB-структурі:jsonb_path_query
дозволяє виконувати запити до JSONB-структур:
SELECT jsonb_path_query(’{"name": "John", "age": 30}’::jsonb, ’$.name’) AS name_result;
||
для оновлення вкладених JSON-полів:
UPDATE table_name
SET json_column = json_column || ’{"details": {"status": "updated"}}’::jsonb
WHERE condition;
jsonb_path_query_array
:jsonb_path_query_array
для отримання масиву результатів фільтрації:
SELECT jsonb_path_query_array(’{"users": [{"name": "John"}, {"name": "Alice"}]}’::jsonb, ’$.users[*].name’) AS names;
jsonb_insert
для вставки значень: Функція jsonb_insert
дозволяє вставляти нові значення в JSONB-структуру:
UPDATE table_name
SET json_column = jsonb_insert(json_column, ’{details, city}’, ’"New York"’);
jsonb_array_elements
для агрегації масивів:jsonb_array_elements
для агрегації значень з масивів:
SELECT json_column->>’name’ AS name, jsonb_array_elements(json_column->’hobbies’) AS hobby
FROM table_name;
jsonb_agg
для агрегації значень в JSON-масив:jsonb_agg
дозволяє агрегувати значення в JSON-масив:
SELECT category, jsonb_agg(name) AS names
FROM table_name
GROUP BY category;
?
:?
для перевірки наявності ключа в JSON-об'єкті:
SELECT * FROM table_name
WHERE json_column->’details’ ? ’city’;
jsonb_each_text
для отримання пар ключ-значення:jsonb_each_text
дозволяє отримати пари ключ-значення з JSON-об'єкта:
SELECT key, value FROM jsonb_each_text(’{"name": "John", "age": 30}’::jsonb);
to_json
:to_json
для перетворення рядка в JSON-строку:
SELECT to_json(’Hello, world!’) AS json_string;
#>>
для отримання значення за шляхом:#>>
для отримання значення за конкретним шляхом в JSON-даних:
SELECT json_column #>> ’{details, city}’ AS city_name
FROM table_name;
jsonb_set
для оновлення вкладених значень:jsonb_set
може бути використана для оновлення вкладених значень в JSONB-структурі:
UPDATE table_name
SET json_column = jsonb_set(json_column, ’{details, city}’, ’"New York"’)
WHERE condition;
jsonb_object_agg
для агрегації ключ-значення:jsonb_object_agg
дозволяє агрегувати пари ключ-значення в JSON-об'єкт:
SELECT category, jsonb_object_agg(name, price) AS products
FROM products_table
GROUP BY category;
jsonb_delete
для вилучення елементів:jsonb_delete
дозволяє вилучати елементи з JSONB-структури:
UPDATE table_name
SET json_column = jsonb_delete(json_column, ’{details, city}’)
WHERE condition;
jsonb_path_match
для фільтрації за шляхом:jsonb_path_match
дозволяє фільтрувати за допомогою шляхів в JSONB-структурі:
SELECT *
FROM table_name
WHERE jsonb_path_match(json_column, ’$.details.city == "New York"’);
jsonb_build_object
:jsonb_build_object
для створення JSON-об'єкта:
SELECT jsonb_build_object(’name’, ’John’, ’age’, 30) AS person_data;
jsonb_array_length
для отримання довжини масиву:jsonb_array_length
дозволяє отримати довжину масиву в JSONB:
SELECT jsonb_array_length(’[1, 2, 3]’::jsonb) AS array_length;
jsonb_strip_nulls
для вилучення значень null
:jsonb_strip_nulls
може бути використана для вилучення всіх значень null
з JSONB-структури:
SELECT jsonb_strip_nulls(’{"name": "John", "age": null, "city": "New York"}’::jsonb) AS cleaned_json;
jsonb_path_query
для отримання значень за шляхом:jsonb_path_query
дозволяє виконувати запити до JSONB-структур за допомогою шляхів:
SELECT jsonb_path_query(’{"user": {"name": "Alice", "age": 25}}’::jsonb, ’$.user.name’) AS user_name;
jsonb_typeof
для отримання типу значення:jsonb_typeof
дозволяє отримати тип значення в JSONB-структурі:
SELECT jsonb_typeof(’{"name": "John"}’::jsonb->’name’) AS name_type;
jsonb_merge
для об'єднання двох JSONB-структур:jsonb_merge
може бути використана для об'єднання двох JSONB-структур:
SELECT jsonb_merge(’{"name": "John"}’::jsonb, ’{"age": 30}’::jsonb) AS merged_json;
@>
для перевірки включення одного JSONB у інший:@>
дозволяє перевіряти включення одного JSONB-об'єкта у інший:
SELECT ’{"name": "John", "age": 30}’::jsonb @> ’{"name": "John"}’::jsonb AS is_included;
CREATE INDEX idx_json_column ON table_name USING gin(json_column);
json_strip_nulls
для вилучення значень null
:json_strip_nulls
може бути використана для вилучення всіх значень null
з JSON-структури:
SELECT json_strip_nulls(’{"name": "John", "age": null, "city": "New York"}’::json) AS cleaned_json;
jsonb_path_query_first
для отримання першого значення за шляхом:jsonb_path_query_first
дозволяє отримати перше значення за шляхом в JSONB-структурі:
SELECT jsonb_path_query_first(’{"user": {"name": "Alice", "age": 25}}’::jsonb, ’$.user.name’) AS user_name;
jsonb_object_keys
для отримання ключів JSONB-об'єкта:jsonb_object_keys
повертає масив ключів JSONB-об'єкта:
SELECT jsonb_object_keys(’{"name": "John", "age": 30}’::jsonb) AS keys;
jsonb_path_exists
для перевірки існування шляху в JSONB-структурі:jsonb_path_exists
перевіряє, чи існує вказаний шлях в JSONB-структурі:
SELECT jsonb_path_exists(’{"user": {"name": "Alice", "age": 25}}’::jsonb, ’$.user.name’) AS name_exists;
jsonb_array_elements_text
для отримання текстових елементів масиву:jsonb_array_elements_text
розгортає JSONB-масив і повертає його текстові елементи:
SELECT jsonb_array_elements_text(’["apple", "orange", "banana"]’::jsonb) AS fruit;
jsonb_each
для отримання ключів та значень з JSONB-об'єкта:jsonb_each
повертає масив пар ключ-значення для кожного елемента JSONB-об'єкта:
SELECT * FROM jsonb_each(’{"name": "John", "age": 30}’::jsonb);
jsonb_path_match
для фільтрації за допомогою шляхів:jsonb_path_match
дозволяє фільтрувати дані за допомогою складних умов на шляхи в JSONB-структурі:
SELECT *
FROM table_name
WHERE jsonb_path_match(json_column, ’$.details.city == "New York"’);
jsonb_deep_object_keys
для отримання всіх ключів вкладених об'єктів:jsonb_deep_object_keys
дозволяє отримати всі ключі вкладених об'єктів в JSONB-структурі:
SELECT * FROM jsonb_deep_object_keys(’{"user": {"name": "Alice", "age": 25}}’::jsonb);
jsonb_path_query_array
для отримання масиву результатів за шляхом:jsonb_path_query_array
повертає масив результатів запиту за шляхом в JSONB-структурі:
SELECT jsonb_path_query_array(’{"users": [{"name": "John"}, {"name": "Alice"}]}’::jsonb, ’$.users[*].name’) AS names;
jsonb_vacuum
для оптимізації простору в JSONB-стовпці:jsonb_vacuum
виконує оптимізацію простору в JSONB-стовпці таблиці:
VACUUM ANALYZE table_name;
json_build_object
:json_build_object
для створення JSON-об'єкта:
SELECT json_build_object(’name’, ’John’, ’age’, 30) AS person_data;
jsonb_exists
для перевірки існування ключа в JSONB-структурі:jsonb_exists
перевіряє, чи існує вказаний ключ в JSONB-структурі:
SELECT jsonb_exists(’{"name": "John", "age": 30}’::jsonb, ’age’) AS age_exists;
jsonb_set
для оновлення вкладених значень в JSONB-структурі:jsonb_set
може бути використана для оновлення вкладених значень в JSONB-структурі:
UPDATE table_name
SET json_column = jsonb_set(json_column, ’{details, city}’, ’"San Francisco"’)
WHERE condition;
jsonb_agg_distinct
для агрегації унікальних значень в JSONB-масиві:jsonb_agg_distinct
агрегує унікальні значення в JSONB-масиві:
SELECT category, jsonb_agg_distinct(name) AS unique_names
FROM products_table
GROUP BY category;
jsonb_path_query_first_text
для отримання першого текстового значення за шляхом:jsonb_path_query_first_text
дозволяє отримати перше текстове значення за шляхом в JSONB-структурі:
SELECT jsonb_path_query_first_text(’{"user": {"name": "Alice", "age": 25}}’::jsonb, ’$.user.name’) AS user_name;
jsonb_to_recordset
для розгортання JSONB-масиву в реляційну структуру:jsonb_to_recordset
дозволяє розгортати JSONB-масив у реляційну структуру:
SELECT * FROM jsonb_to_recordset(’[{"name": "John", "age": 30}, {"name": "Alice", "age": 25}]’::jsonb) AS t(name text, age int);
json_array_length
для отримання довжини JSON-масиву:json_array_length
дозволяє отримати довжину JSON-масиву:
SELECT json_array_length(’["apple", "orange", "banana"]’::json) AS array_length;
json_strip_nulls
для вилучення значень null
з JSON-структури:json_strip_nulls
дозволяє вилучити всі значення null
з JSON-структури:
SELECT json_strip_nulls(’{"name": "John", "age": null, "city": "New York"}’::json) AS cleaned_json;
jsonb_array_elements_text
для отримання текстових елементів масиву:jsonb_array_elements_text
дозволяє отримати текстові елементи з JSONB-масиву:
SELECT jsonb_array_elements_text(’["apple", "orange", "banana"]’::jsonb) AS fruit;
#-
для вилучення ключів з JSON-об'єкта:#-
:
SELECT ’{"name": "John", "age": 30}’::jsonb #- ’{age}’ AS json_without_age;
jsonb_pretty
для красивого форматування JSONB-даних:jsonb_pretty
призначена для красивого форматування JSONB-даних для зручності відображення:
SELECT jsonb_pretty(’{"name": "John", "age": 30, "city": "New York"}’::jsonb) AS pretty_json;
jsonb_array_elements
для розгортання JSONB-масиву:jsonb_array_elements
розгортає JSONB-масив та повертає його елементи:
SELECT jsonb_array_elements(’["apple", "orange", "banana"]’::jsonb) AS fruit;
jsonb_path_query
для вибору елементів за складним шляхом:jsonb_path_query
дозволяє вибирати елементи за складним шляхом в JSONB-структурі:
SELECT jsonb_path_query(’{"user": {"name": "Alice", "age": 25, "address": {"city": "New York"}}}’::jsonb, ’$.user.address.city’) AS user_city;
jsonb_array_elements
та jsonb_object_keys
для роботи з масивами об'єктів:jsonb_array_elements
та jsonb_object_keys
дозволяє працювати з масивами об'єктів:
SELECT key, value
FROM jsonb_array_elements(’[{"name": "John", "age": 30}, {"name": "Alice", "age": 25}]’::jsonb) AS obj,
jsonb_object_keys(obj) AS key;
jsonb_typeof
для отримання типу значення в JSONB-структурі:jsonb_typeof
повертає тип значення в JSONB-структурі:
SELECT jsonb_typeof(’{"name": "John"}’::jsonb->’name’) AS name_type;
jsonb_array_elements
для отримання усіх значень масиву:jsonb_array_elements
може бути використана для отримання усіх значень з JSONB-масиву:
SELECT value
FROM jsonb_array_elements(’["apple", "orange", "banana"]’::jsonb) AS fruits;
->>
для отримання значення за ключем як рядка:->>
дозволяє отримати значення за ключем як рядка:
SELECT ’{"name": "John", "age": 30}’::jsonb ->> ’name’ AS name;
jsonb_object_agg
для агрегації значень в JSONB-об'єкт:jsonb_object_agg
агрегує значення в JSONB-об'єкт:
SELECT category, jsonb_object_agg(name, price) AS products
FROM products_table
GROUP BY category;
jsonb_to_tsvector
для створення tsvector індексу з JSONB-даних:jsonb_to_tsvector
дозволяє створювати tsvector для використання у пошукових операціях:
CREATE INDEX idx_jsonb_text_search ON table_name USING gin(jsonb_to_tsvector(’english’, json_column));
jsonb_typeof
для визначення типу JSONB-значення:jsonb_typeof
дозволяє визначити тип JSONB-значення:
SELECT jsonb_typeof(’{"name": "John"}’::jsonb->’name’) AS name_type;
jsonb_path_query_array
для отримання масиву результатів за шляхом:jsonb_path_query_array
повертає масив результатів запиту за шляхом в JSONB-структурі:
SELECT jsonb_path_query_array(’{"users": [{"name": "John"}, {"name": "Alice"}]}’::jsonb, ’$.users[*].name’) AS names;
jsonb_deep_object_keys
для отримання всіх ключів вкладених об'єктів:jsonb_deep_object_keys
дозволяє отримати всі ключі вкладених об'єктів в JSONB-структурі:
SELECT * FROM jsonb_deep_object_keys(’{"user": {"name": "Alice", "age": 25}}’::jsonb);
jsonb_set
для оновлення вкладених значень:jsonb_set
може бути використана для оновлення вкладених значень в JSONB-структурі:
UPDATE table_name
SET json_column = jsonb_set(json_column, ’{details, city}’, ’"San Francisco"’)
WHERE condition;
jsonb_array_elements_text
для отримання текстових елементів масиву:jsonb_array_elements_text
розгортає JSONB-масив і повертає його текстові елементи:
SELECT jsonb_array_elements_text(’["apple", "orange", "banana"]’::jsonb) AS fruit;
jsonb_vacuum
для оптимізації простору в JSONB-стовпці:jsonb_vacuum
виконує оптимізацію простору в JSONB-стовпці таблиці:
VACUUM ANALYZE table_name;
jsonb_delete
для вилучення елементів:jsonb_delete
дозволяє вилучати елементи з JSONB-структури:
UPDATE table_name
SET json_column = jsonb_delete(json_column, ’{details, city}’)
WHERE condition;
@>
для перевірки включення одного JSONB у інший:@>
дозволяє перевіряти включення одного JSONB-об'єкта у інший:
SELECT ’{"name": "John", "age": 30}’::jsonb @> ’{"name": "John"}’::jsonb AS is_included;
jsonb_strip_nulls
для вилучення значень null
:jsonb_strip_nulls
може бути використана для вилучення всіх значень null
з JSONB-структури:
SELECT jsonb_strip_nulls(’{"name": "John", "age": null, "city": "New York"}’::jsonb) AS cleaned_json;
jsonb_object_agg
для агрегації ключ-значення:jsonb_object_agg
дозволяє агрегувати пари ключ-значення в JSON-об'єкт:
SELECT category, jsonb_object_agg(name, price) AS products
FROM products_table
GROUP BY category;
jsonb_to_tsvector
для створення tsvector індексу з JSONB-даних:jsonb_to_tsvector
дозволяє створювати tsvector для використання у пошукових операціях:
CREATE INDEX idx_jsonb_text_search ON table_name USING gin(jsonb_to_tsvector(’english’, json_column));
jsonb_typeof
для отримання типу значення:jsonb_typeof
дозволяє отримати тип значення в JSONB-структурі:
SELECT jsonb_typeof(’{"name": "John"}’::jsonb->’name’) AS name_type;
jsonb_insert
для вставки нового елемента:jsonb_insert
вставляє новий елемент в JSONB-структуру:
UPDATE table_name
SET json_column = jsonb_insert(json_column, ’{details, city}’, ’"San Francisco"’)
WHERE condition;
jsonb_each
для отримання ключів та значень:jsonb_each
повертає масив пар ключ-значення для кожного елемента JSONB-об'єкта:
SELECT * FROM jsonb_each(’{"name": "John", "age": 30}’::jsonb);
jsonb_path_query_text_array
для отримання масиву текстових результатів за шляхом:jsonb_path_query_text_array
повертає масив текстових результатів запиту за шляхом в JSONB-структурі:
SELECT jsonb_path_query_text_array(’{"users": [{"name": "John"}, {"name": "Alice"}]}’::jsonb, ’$.users[*].name’) AS names;
jsonb_array_length
для отримання довжини JSONB-масиву:jsonb_array_length
дозволяє отримати довжину JSONB-масиву:
SELECT jsonb_array_length(’["apple", "orange", "banana"]’::jsonb) AS array_length;
jsonb_path_query_first_text
для отримання першого текстового значення за шляхом:jsonb_path_query_first_text
дозволяє отримати перше текстове значення за шляхом в JSONB-структурі:
SELECT jsonb_path_query_first_text(’{"user": {"name": "Alice", "age": 25}}’::jsonb, ’$.user.name’) AS user_name;
jsonb_array_elements
для розгортання JSONB-масиву:jsonb_array_elements
розгортає JSONB-масив та повертає його елементи:
SELECT jsonb_array_elements(’["apple", "orange", "banana"]’::jsonb) AS fruit;
->>
для отримання значення за ключем як рядка:->>
дозволяє отримати значення за ключем як рядка:
SELECT ’{"name": "John", "age": 30}’::jsonb ->> ’name’ AS name;
jsonb_object_agg
для агрегації значень в JSONB-об'єкт:jsonb_object_agg
агрегує значення в JSONB-об'єкт:
SELECT category, jsonb_object_agg(name, price) AS products
FROM products_table
GROUP BY category;
jsonb_deep_object_keys
для отримання всіх ключів вкладених об'єктів:jsonb_deep_object_keys
дозволяє отримати всі ключі вкладених об'єктів в JSONB-структурі:
```sql
SELECT * FROM jsonb_deep_object_keys(’{"user": {"name": "Alice", "age": 25}}’::jsonb);
```
jsonb_pretty
для красивого форматування JSONB-даних:jsonb_pretty
використовується для красивого форматування JSONB-даних для полегшення їхнього відображення:
```sql
SELECT jsonb_pretty(’{"name": "John", "age": 30, "city": "New York"}’::jsonb) AS pretty_json;
```
jsonb_array_elements
для отримання усіх значень масиву:jsonb_array_elements
може бути використана для отримання усіх значень з JSONB-масиву:
```sql
SELECT value
FROM jsonb_array_elements(’["apple", "orange", "banana"]’::jsonb) AS fruits;
```
jsonb_strip_nulls
для вилучення значень null
:jsonb_strip_nulls
може бути використана для вилучення всіх значень null
з JSONB-структури:
```sql
SELECT jsonb_strip_nulls(’{"name": "John", "age": null, "city": "New York"}’::jsonb) AS cleaned_json;
```
jsonb_typeof
для визначення типу JSONB-значення:jsonb_typeof
дозволяє визначити тип JSONB-значення:
```sql
SELECT jsonb_typeof(’{"name": "John"}’::jsonb->’name’) AS name_type;
```
jsonb_array_elements_text
для отримання текстових елементів масиву:jsonb_array_elements_text
розгортає JSONB-масив і повертає його текстові елементи:
```sql
SELECT jsonb_array_elements_text(’["apple", "orange", "banana"]’::jsonb) AS fruit;
```
jsonb_agg
для агрегації значень в JSONB-масив:jsonb_agg
агрегує значення в JSONB-масив:
```sql
SELECT category, jsonb_agg(name) AS products
FROM products_table
GROUP BY category;
```
jsonb_to_recordset
для розгортання JSONB-масиву в реляційну структуру:jsonb_to_recordset
дозволяє розгортати JSONB-масив у реляційну структуру:
```sql
SELECT * FROM jsonb_to_recordset(’[{"name": "John", "age": 30}, {"name": "Alice", "age": 25}]’::jsonb) AS t(name text, age int);
```
jsonb_path_query_first
для отримання першого результату за шляхом:jsonb_path_query_first
дозволяє отримати перший результат за шляхом в JSONB-структурі:
```sql
SELECT jsonb_path_query_first(’{"user": {"name": "Alice", "age": 25}}’::jsonb, ’$.user.name’) AS user_name;
```
jsonb_to_tsvector
для створення tsvector індексу з JSONB-даних:jsonb_to_tsvector
дозволяє створювати tsvector для використання у пошукових операціях:
```sql
CREATE INDEX idx_jsonb_text_search ON table_name USING gin(jsonb_to_tsvector(’english’, json_column));
```
jsonb_array_elements_text
для отримання текстових елементів масиву:jsonb_array_elements_text
розгортає JSONB-масив і повертає його текстові елементи:
```sql
SELECT jsonb_array_elements_text(’["apple", "orange", "banana"]’::jsonb) AS fruit;
```
jsonb_path_query_array
для отримання масиву результатів за шляхом:jsonb_path_query_array
повертає масив результатів запиту за шляхом в JSONB-структурі:
```sql
SELECT jsonb_path_query_array(’{"users": [{"name": "John"}, {"name": "Alice"}]}’::jsonb, ’$.users[*].name’) AS names;
```
jsonb_delete
для вилучення елементів:jsonb_delete
дозволяє вилучати елементи з JSONB-структури:
```sql
UPDATE table_name
SET json_column = jsonb_delete(json_column, ’{details, city}’)
WHERE condition;
```
jsonb_path_query_text_array
для отримання масиву текстових результатів за шляхом:jsonb_path_query_text_array
повертає масив текстових результатів запиту за шляхом в JSONB-структурі:
```sql
SELECT jsonb_path_query_text_array(’{"users": [{"name": "John"}, {"name": "Alice"}]}’::jsonb, ’$.users[*].name’) AS names;
```
jsonb_object_keys
для отримання ключів об'єкта:jsonb_object_keys
повертає масив ключів в JSONB-об'єкті:
```sql
SELECT jsonb_object_keys(’{"name": "John", "age": 30}’::jsonb) AS keys;
```
jsonb_set
для оновлення вкладених значень:jsonb_set
може бути використана для оновлення вкладених значень в JSONB-структурі:
```sql
UPDATE table_name
SET json_column = jsonb_set(json_column, ’{details, city}’, ’"San Francisco"’)
WHERE condition;
```
jsonb_array_elements
для отримання усіх значень масиву:jsonb_array_elements
може бути використана для отримання усіх значень з JSONB-масиву:
```sql
SELECT value
FROM jsonb_array_elements(’["apple", "orange", "banana"]’::jsonb) AS fruits;
```
->>
для отримання значення за ключем як рядка:->>
дозволяє отримати значення за ключем як рядка:
```sql
SELECT ’{"name": "John", "age": 30}’::jsonb ->> ’name’ AS name;
```
jsonb_object_agg
для агрегації значень в JSONB-об'єкт:jsonb_object_agg
агрегує значення в JSONB-об'єкт:
```sql
SELECT category, jsonb_object_agg(name, price) AS products
FROM products_table
GROUP BY category;
```
jsonb_to_tsvector
для створення tsvector індексу з JSONB-даних:jsonb_to_tsvector
дозволяє створювати tsvector для використання у пошукових операціях:
```sql
CREATE INDEX idx_jsonb_text_search ON table_name USING gin(jsonb_to_tsvector(’english’, json_column));
```
jsonb_typeof
для визначення типу JSONB-значення:jsonb_typeof
дозволяє визначити тип JSONB-значення:
```sql
SELECT jsonb_typeof(’{"name": "John"}’::jsonb->’name’) AS name_type;
```
jsonb_path_query_first_text
для отримання першого текстового значення за шляхом:jsonb_path_query_first_text
дозволяє отримати перше текстове значення за шляхом в JSONB-структурі:
```sql
SELECT jsonb_path_query_first_text(’{"user": {"name": "Alice", "age": 25}}’::jsonb, ’$.user.name’) AS user_name;
```
jsonb_array_elements
для розгортання JSONB-масиву:jsonb_array_elements
розгортає JSONB-масив та повертає його елементи:
```sql
SELECT jsonb_array_elements(’["apple", "orange", "banana"]’::jsonb) AS fruit;
```
@>
для перевірки включення одного JSONB у інший:@>
дозволяє перевіряти включення одного JSONB-об'єкта у інший:
```sql
SELECT ’{"name": "John", "age": 30}’::jsonb @> ’{"name": "John"}’::jsonb AS is_included;
```
jsonb_strip_nulls
для вилучення значень null
:jsonb_strip_nulls
може бути використана для вилучення всіх значень null
з JSONB-структури:
```sql
SELECT jsonb_strip_nulls(’{"name": "John", "age": null, "city": "New York"}’::jsonb) AS cleaned_json;
```
jsonb_object_agg
для агрегації ключ-значення:jsonb_object_agg
дозволяє агрегувати пари ключ-значення в JSON-об'єкт:
```sql
SELECT category, jsonb_object_agg(name, price) AS products
FROM products_table
GROUP BY category;
```
jsonb_pretty
для красивого форматування JSONB-даних:jsonb_pretty
використовується для красивого форматування JSONB-даних для полегшення їхнього відображення:
```sql
SELECT jsonb_pretty(’{"name": "John", "age": 30, "city": "New York"}’::jsonb) AS pretty_json;
```
jsonb_array_elements
для отримання усіх значень масиву:jsonb_array_elements
може бути використана для отримання усіх значень з JSONB-масиву:
```sql
SELECT value
FROM jsonb_array_elements(’["apple", "orange", "banana"]’::jsonb) AS fruits;
```
jsonb_strip_nulls
для вилучення значень null
:jsonb_strip_nulls
може бути використана для вилучення всіх значень null
з JSONB-структури:
```sql
SELECT jsonb_strip_nulls(’{"name": "John", "age": null, "city": "New York"}’::jsonb) AS cleaned_json;
```
jsonb_typeof
для визначення типу JSONB-значення:jsonb_typeof
дозволяє визначити тип JSONB-значення:
```sql
SELECT jsonb_typeof(’{"name": "John"}’::jsonb->’name’) AS name_type;
```
jsonb_array_elements_text
для отримання текстових елементів масиву:jsonb_array_elements_text
розгортає JSONB-масив і повертає його текстові елементи:
```sql
SELECT jsonb_array_elements_text(’["apple", "orange", "banana"]’::jsonb) AS fruit;
```
jsonb_path_query
для отримання результату за шляхом:jsonb_path_query
повертає результат запиту за шляхом в JSONB-структурі:
```sql
SELECT jsonb_path_query(’{"user": {"name": "Alice", "age": 25}}’::jsonb, ’$.user.name’) AS user_name;
```
jsonb_array_elements
для отримання усіх елементів масиву:jsonb_array_elements
витягає всі елементи з JSONB-масиву:
```sql
SELECT value
FROM jsonb_array_elements(’["apple", "orange", "banana"]’::jsonb) AS fruit;
```
jsonb_set
для оновлення значень за шляхом:jsonb_set
дозволяє оновлювати значення за шляхом в JSONB-структурі:
```sql
UPDATE table_name
SET json_column = jsonb_set(json_column, ’{user, name}’, ’"Bob"’)
WHERE condition;
```
jsonb_array_length
для отримання довжини JSONB-масиву:jsonb_array_length
визначає довжину JSONB-масиву:
```sql
SELECT jsonb_array_length(’["apple", "orange", "banana"]’::jsonb) AS array_length;
```
jsonb_path_query_array
для отримання масиву результатів за шляхом:jsonb_path_query_array
повертає масив результатів запиту за шляхом в JSONB-структурі:
```sql
SELECT jsonb_path_query_array(’{"users": [{"name": "John"}, {"name": "Alice"}]}’::jsonb, ’$.users[*].name’) AS names;
```
jsonb_each_text
для отримання ключів та значень у вигляді тексту:jsonb_each_text
повертає набір рядків ключ-значення для кожного елемента JSONB-об'єкта:
```sql
SELECT * FROM jsonb_each_text(’{"name": "John", "age": 30}’::jsonb);
```
jsonb_array_elements
для отримання елементів JSONB-масиву:jsonb_array_elements
може бути використана для отримання всіх елементів JSONB-масиву:
```sql
SELECT value FROM jsonb_array_elements(’["apple", "orange", "banana"]’::jsonb);
```
jsonb_to_record
для конвертації JSONB-значення в реляційну структуру:jsonb_to_record
конвертує JSONB-значення в реляційну структуру:
```sql
SELECT * FROM jsonb_to_record(’{"name": "John", "age": 30}’::jsonb) AS t(name text, age int);
```
jsonb_build_object
для створення JSONB-об'єкта:jsonb_build_object
створює JSONB-об'єкт з пар ключ-значення:
```sql
SELECT jsonb_build_object(’name’, ’John’, ’age’, 30) AS person;
```
jsonb_deep_object_keys
для отримання всіх ключів вкладених об'єктів:jsonb_deep_object_keys
дозволяє отримати всі ключі вкладених об'єктів в JSONB-структурі:
```sql
SELECT * FROM jsonb_deep_object_keys(’{"user": {"name": "Alice", "age": 25}}’::jsonb);
```
jsonb_agg
для агрегації значень в JSONB-масив:jsonb_agg
агрегує значення в JSONB-масив:
```sql
SELECT category, jsonb_agg(name) AS products
FROM products_table
GROUP BY category;
```
jsonb_to_recordset
для розгортання JSONB-масиву в реляційну структуру:jsonb_to_recordset
дозволяє розгортати JSONB-масив у реляційну структуру:
```sql
SELECT * FROM jsonb_to_recordset(’[{"name": "John", "age": 30}, {"name": "Alice", "age": 25}]’::jsonb) AS t(name text, age int);
```
jsonb_path_query_first
для отримання першого результату за шляхом:jsonb_path_query_first
дозволяє отримати перший результат за шляхом в JSONB-структурі:
```sql
SELECT jsonb_path_query_first(’{"user": {"name": "Alice", "age": 25}}’::jsonb, ’$.user.name’) AS user_name;
```
jsonb_to_tsvector
для створення tsvector індексу з JSONB-даних:jsonb_to_tsvector
дозволяє створювати tsvector для використання у пошукових операціях:
```sql
CREATE INDEX idx_jsonb_text_search ON table_name USING gin(jsonb_to_tsvector(’english’, json_column));
```
jsonb_array_elements_text
для отримання текстових елементів масиву:jsonb_array_elements_text
розгортає JSONB-масив і повертає його текстові елементи:
```sql
SELECT jsonb_array_elements_text(’["apple", "orange", "banana"]’::jsonb) AS fruit;
```
jsonb_path_query_array
для отримання масиву результатів за шляхом:jsonb_path_query_array
повертає масив результатів запиту за шляхом в JSONB-структурі:
```sql
SELECT jsonb_path_query_array(’{"users": [{"name": "John"}, {"name": "Alice"}]}’::jsonb, ’$.users[*].name’) AS names;
```
jsonb_delete
для вилучення елементів:jsonb_delete
дозволяє вилучати елементи з JSONB-структури:
```sql
UPDATE table_name
SET json_column = jsonb_delete(json_column, ’{details, city}’)
WHERE condition;
```
jsonb_path_query_text_array
для отримання масиву текстових результатів за шляхом:jsonb_path_query_text_array
повертає масив текстових результатів запиту за шляхом в JSONB-структурі:
```sql
SELECT jsonb_path_query_text_array(’{"users": [{"name": "John"}, {"name": "Alice"}]}’::jsonb, ’$.users[*].name’) AS names;
```
jsonb_object_keys
для отримання ключів об'єкта:jsonb_object_keys
повертає масив ключів в JSONB-об'єкті:
```sql
SELECT jsonb_object_keys(’{"name": "John", "age": 30}’::jsonb) AS keys;
```
jsonb_set
для оновлення вкладених значень:jsonb_set
може бути використана для оновлення вкладених значень в JSONB-структурі:
```sql
UPDATE table_name
SET json_column = jsonb_set(json_column, ’{details, city}’, ’"San Francisco"’)
WHERE condition;
```
jsonb_path_query_first_text
для отримання першого текстового значення за шляхом:jsonb_path_query_first_text
дозволяє отримати перше текстове значення за шляхом в JSONB-структурі:
```sql
SELECT jsonb_path_query_first_text(’{"user": {"name": "Alice", "age": 25}}’::jsonb, ’$.user.name’) AS user_name;
```
jsonb_array_elements
для розгортання JSONB-масиву:jsonb_array_elements
розгортає JSONB-масив та повертає його елементи:
```sql
SELECT jsonb_array_elements(’["apple", "orange", "banana"]’::jsonb) AS fruit;
```
@>
для перевірки включення одного JSONB у інший:@>
дозволяє перевіряти включення одного JSONB-об'єкта у інший:
```sql
SELECT ’{"name": "John", "age": 30}’::jsonb @> ’{"name": "John"}’::jsonb AS is_included;
```
jsonb_strip_nulls
для вилучення значень null
:jsonb_strip_nulls
може бути використана для вилучення всіх значень null
з JSONB-структури:
```sql
SELECT jsonb_strip_nulls(’{"name": "John", "age": null, "city": "New York"}’::jsonb) AS cleaned_json;
```
jsonb_object_agg
для агрегації ключ-значення:jsonb_object_agg
дозволяє агрегувати пари ключ-значення в JSON-об'єкт:
```sql
SELECT category, jsonb_object_agg(name, price) AS products
FROM products_table
GROUP BY category;
```
jsonb_pretty
для красивого форматування JSONB-даних:jsonb_pretty
використовується для красивого форматування JSONB-даних для полегшення їхнього відображення:
```sql
SELECT jsonb_pretty(’{"name": "John", "age": 30, "city": "New York"}’::jsonb) AS pretty_json;
```
jsonb_array_elements
для отримання усіх значень масиву:jsonb_array_elements
може бути використана для отримання усіх значень з JSONB-масиву:
```sql
SELECT value
FROM jsonb_array_elements(’["apple", "orange", "banana"]’::jsonb) AS fruits;
```
jsonb_strip_nulls
для вилучення значень null
:jsonb_strip_nulls
може бути використана для вилучення всіх значень null
з JSONB-структури:
```sql
SELECT jsonb_strip_nulls(’{"name": "John", "age": null, "city": "New York"}’::jsonb) AS cleaned_json;
```
jsonb_typeof
для визначення типу JSONB-значення:jsonb_typeof
дозволяє визначити тип JSONB-значення:
```sql
SELECT jsonb_typeof(’{"name": "John"}’::jsonb->’name’) AS name_type;
```
jsonb_array_elements_text
для отримання текстових елементів масиву:jsonb_array_elements_text
розгортає JSONB-масив і повертає його текстові елементи:
```sql
SELECT jsonb_array_elements_text(’["apple", "orange", "banana"]’::jsonb) AS fruit;
```
Автор: Рудюк С.А. 2023. K2 Cloud ERP.