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.