|
Как обновить поле глубоко в jsonb объекте?
|
|||
---|---|---|---|
#18+
Сам объект примерно такой: Код: javascript 1. 2. 3. 4. 5.
К примеру нужно обновить data.strips[0].o.key2. Подскажите, плз, как это можно сделать одним запросом? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 11:47 |
|
Как обновить поле глубоко в jsonb объекте?
|
|||
---|---|---|---|
#18+
DennniLA2Сам объект примерно такой: Код: javascript 1. 2. 3. 4. 5.
К примеру нужно обновить data.strips[0].o.key2. Подскажите, плз, как это можно сделать одним запросом? в любом случае обновится вся запись (будет новая версия записи--писи). т.ч. бороться за доступ к полю по сцылке -- бессмысленно. т.ч. перестраивайте как угодно -- хоть как текст. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 12:45 |
|
Как обновить поле глубоко в jsonb объекте?
|
|||
---|---|---|---|
#18+
DennniLA2, Если в лоб, тока через jsonb ... https://postgrespro.ru/docs/postgresql/10/functions-json.html] jsonb_set(target jsonb, path text[], new_value jsonb[, create_missing boolean]) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2017, 13:03 |
|
Как обновить поле глубоко в jsonb объекте?
|
|||
---|---|---|---|
#18+
Да на самом деле плоховата всё, как дело начинается с обновление элементов массива (в Postgres 10 обещали улучшения... но возможно отложили). Вам требуется json или вполне подходит jsonb (не сохраняет порядок ...) jsonb имеет смысл использовать для хранение небольших(не имеющих многоуровневых структур, вложенных массивов[по крайней мере до 10 версии]). Крайне неудобно обновлять, когда элементом массива является объект, и допустим в нем необходимо обновить элемент массива ..... Короче postgresql, до уровня DB2/MsSQL котороые умеют хорошо работать с xml/xpath еще, далековато.... Сегодня уже поздно, завтра попробую накидать примеров. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2017, 00:49 |
|
Как обновить поле глубоко в jsonb объекте?
|
|||
---|---|---|---|
#18+
BspleskКороче postgresql, до уровня DB2/MsSQL котороые умеют хорошо работать с xml/xpath еще, далековато.... Сегодня уже поздно, завтра попробую накидать примеров. А причем тут собственно json к xml/xpath? Это вообще разные вещи. По xml/xpath - это сюда https://www.postgresql.org/docs/10/static/functions-xml.html. PS: если вы в базе зачем то хотите менять отдельные элементы json - у вас неверная архитектура и эти элементы должны быть в виде полей таблицы. Не надо nosql storage из postgresql делать ;). ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2017, 02:25 |
|
Как обновить поле глубоко в jsonb объекте?
|
|||
---|---|---|---|
#18+
PS: если вы в базе зачем то хотите менять отдельные элементы json - у вас неверная архитектура и эти элементы должны быть в виде полей таблицы. Не надо nosql storage из postgresql делать ;). На текущий момент, соглашусь с этим. Но опять же не обманывать/вводить в заблуждение [про надо и не надо] - те задачи которые ложатся на jsonb [xml/xpath в DB2/MSSQL] напрямую в RDBMS вам не решить , и придется вам строить очередной EAV (с вывертом всей relation - модели наизнанку), а как только (обычно почти сразу) понадобится иерархия/таксономия, начнете модернизировать её до EAV-CR, ну заодно и по таблички на каждый тип, с поддержкой целостности на процедурах/триггерах и.т.д (как апогей смотрим к примеру magento). По факту строить эмуляцию объектного хранилища данных (на самом деле не вижу ничего в этом ужасного) - все ERP построены на этом г. Хостеры кстати, активно пиарят готовые вещи, к примеру: https://www.digitalocean.com/products/object-storage/ Т.к. JSON - JavaScript Object Notation (хотя и Front-end обижаются, что это не совсем js object), и множество текущих проектов в качестве клиентской части имеют имеют исключительно web, а использовать 2 БД NOSQL и "RDBMS", это тот еще геморрой, то как раз и хотят при помощи PostgreSQL убить двух зайцев, где позволяют требования использовать relation, где не позволяют там заместо EAV/+NOSQL BD, использовать jsonb поля (тем более на front_е json). Но тут свои трудности, что по факту jsonb и соответствующая обвязка в postgresql еще не готова (в отличии от DB2/MSSQL, в которых при помощи xml/xpath это все возможно(но xml из front повыпиливали по факту), в postgresql возможности xml/xpath - это слёзы), т.к. front часто просить и изменять данные, или в json_е но в другом более удобном формате. В стеке xml есть Xpath/xlst, в jsonb с этим пока не очень .... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2017, 11:34 |
|
Как обновить поле глубоко в jsonb объекте?
|
|||
---|---|---|---|
#18+
BspleskPS: если вы в базе зачем то хотите менять отдельные элементы json - у вас неверная архитектура и эти элементы должны быть в виде полей таблицы. Не надо nosql storage из postgresql делать ;). На текущий момент, соглашусь с этим. Но опять же не обманывать/вводить в заблуждение [про надо и не надо] - те задачи которые ложатся на jsonb [xml/xpath в DB2/MSSQL] напрямую в RDBMS вам не решить , и придется вам строить очередной EAV (с вывертом всей relation - модели наизнанку), а как только (обычно почти сразу) понадобится иерархия/таксономия, начнете модернизировать её до EAV-CR, ну заодно и по таблички на каждый тип, с поддержкой целостности на процедурах/триггерах и.т.д (как апогей смотрим к примеру magento). По факту строить эмуляцию объектного хранилища данных (на самом деле не вижу ничего в этом ужасного) - все ERP построены на этом г. Хостеры кстати, активно пиарят готовые вещи, к примеру: https://www.digitalocean.com/products/object-storage/ Т.к. JSON - JavaScript Object Notation (хотя и Front-end обижаются, что это не совсем js object), и множество текущих проектов в качестве клиентской части имеют имеют исключительно web, а использовать 2 БД NOSQL и "RDBMS", это тот еще геморрой, то как раз и хотят при помощи PostgreSQL убить двух зайцев, где позволяют требования использовать relation, где не позволяют там заместо EAV/+NOSQL BD, использовать jsonb поля (тем более на front_е json). Но тут свои трудности, что по факту jsonb и соответствующая обвязка в postgresql еще не готова (в отличии от DB2/MSSQL, в которых при помощи xml/xpath это все возможно(но xml из front повыпиливали по факту), в postgresql возможности xml/xpath - это слёзы), т.к. front часто просить и изменять данные, или в json_е но в другом более удобном формате. В стеке xml есть Xpath/xlst, в jsonb с этим пока не очень .... Таки чем вас jsonb_set не устраивает? Он же решает именно ту задачу что вы хотите. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2017, 14:02 |
|
Как обновить поле глубоко в jsonb объекте?
|
|||
---|---|---|---|
#18+
Предположим есть структура, конечно, динамическая, заранее неизвестная: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
Хочу update всех значения, для "key_3" --> index array -->"sub_key_4" --> index array --> sub_sub_key_2" --> "sub_sub_key_val2" естественно для всех записей в бд, имеющие данные по этому пути. p.s. без использования pgplsql, pyhlon, jquery ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2017, 17:03 |
|
Как обновить поле глубоко в jsonb объекте?
|
|||
---|---|---|---|
#18+
При этом, данных значений может быть несколько в одной записи. "key_3" --> index array -->"sub_key_4" --> index array --> sub_sub_key_2" --> "sub_sub_key_val2" ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2017, 17:24 |
|
Как обновить поле глубоко в jsonb объекте?
|
|||
---|---|---|---|
#18+
Для понимания .... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2017, 00:39 |
|
Как обновить поле глубоко в jsonb объекте?
|
|||
---|---|---|---|
#18+
Указанный выше запрос, обновит только одну запись в json. Тоесть, если json будет представлять что-то типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
за один запуск, будет обновлена только одна запись. (для замены всех записей соответствующих условию, требуется или выполнить в цикле update одной и тойже записи или сформировать измененный json и сделать один update) Вообщем разыскивается, запрос для решения данной задачи, без применения plpgsql .... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2017, 11:43 |
|
|
start [/forum/topic.php?fid=53&fpage=62&tid=1996038]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
86ms |
get tp. blocked users: |
2ms |
others: | 301ms |
total: | 468ms |
0 / 0 |