powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как делать UPDATE для типа данных json в PosrgeSQL
6 сообщений из 6, страница 1 из 1
Как делать UPDATE для типа данных json в PosrgeSQL
    #38898796
Generalproger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте есть json массив param:

["123",[23,0,"12:02"]]

Требуется обновить param->1->0

UPDATE ah_library SET param->1->0 = 1;
[Err] ОШИБКА: ошибка синтаксиса (примерное положение: "->")

Как это сделать? Неужели способа кроме как вытащить весь массив param в Java и там ему заменить значение нету?
...
Рейтинг: 0 / 0
Как делать UPDATE для типа данных json в PosrgeSQL
    #38898857
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GeneralprogerЗдравствуйте есть json массив param:

["123",[23,0,"12:02"]]

Требуется обновить param->1->0

UPDATE ah_library SET param->1->0 = 1;
[Err] ОШИБКА: ошибка синтаксиса (примерное положение: "->")

Как это сделать? Неужели способа кроме как вытащить весь массив param в Java и там ему заменить значение нету?

С т.з. базы json по большому счету просто простыня текста... так что в общем случае да - вытаскивать на приложение и там менять.
Если вам такое понадобилось делать часто - у вас неправильный дизайн базы и это поле (поля) должны быть не в json а в основной таблице.

Если сильно постараться можно попробовать Json разобрать запросом и собрать назад. Но это неудобно в общем случае.
См: тут например.

--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Как делать UPDATE для типа данных json в PosrgeSQL
    #38899069
Лопата
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Generalproger,

update в базе -- это дублирование всей записи (а если джейсон килобайтный, а то и более -- то представьте себе цену)

да и редактирование json-а, как переменной, -- это ещё и разборка сборка его через присвоение его всего каким-то переменным, один -- исходной, второй -- выходной, ну и в промежутках преобразования, а не как бы хотелось -- поменять сво-во объекта по указателю, ничего не разбирая руками и т.п.. (может быть в перл его кстати дешевле будет запихать, и там надругаться -- там похожие объекты есть, надо покумекать).

т.ч. если вы используете json -- вы либо идиот, либо очень хорошо представляете себе цену этого шага. второе, очевидно, к вам пока не относится. такие дела
...
Рейтинг: 0 / 0
Как делать UPDATE для типа данных json в PosrgeSQL
    #38899232
Generalproger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
лопата,

Почитал по этой теме, пожалуй вы правы, в данном случае он не настолько нужен.
А в целом JSON мне кажется использовать очень удобно если редко обновлять, или выборка элемента это тоже высокая нагрузка на БД?
...
Рейтинг: 0 / 0
Как делать UPDATE для типа данных json в PosrgeSQL
    #38899277
Лопата
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Generalproger,

есть многие штуки, которые иногда сильно ускоряют некоторые вещи, в т.ч. массивы.

кое-что можно упростить через hstore, который якобы слабее джейсона, но в плоском случае удобнее -- у него конкатенация есть. а именно -- хранение переменного число атрибутов, тем не менее индексируемого , в отличие от EAV.

для json скорее всего тоже есть ниша -- когда апдейты редки, или можно с ними смириться, в том случае, когда по json возможен какой-нито полезный функциональный индекс, частый в пользовании.

(всё от того, что доступные всяким негодяям в М-системах самопальные индексы по чему угодно нам не доступны -- нельзя повесить смешенный индекс на комбинации полей и выражений из 2-х таблиц, да и по комбинации строк одной (типа gist на ARRAY (SELECT fld FROM tbl WHERE main_id .... ) ) -- не вешается. )
...
Рейтинг: 0 / 0
Как делать UPDATE для типа данных json в PosrgeSQL
    #38910860
Sasha Alias
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нужно много работать с JSON, рекомендую установить plv8.
Для javascript / coffeescript JSON - родной тип данных, и работать с ним легко и приятно.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
DROP TABLE IF EXISTS ah_library;
---
CREATE TABLE ah_library(param JSON);
---
INSERT INTO ah_library VALUES('["123",[23,0,"12:02"]]'::json);
---
CREATE OR REPLACE FUNCTION change_param(i_param JSON, i_value INTEGER) RETURNS json AS
$$
    i_param[1][0] = i_value
    return i_param
$$
LANGUAGE plcoffee SECURITY DEFINER; 
---
SELECT * FROM ah_library;
---
UPDATE ah_library SET param = change_param(param, 1);
---
SELECT * FROM ah_library;



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
DROP TABLE
CREATE TABLE
INSERT 0 1
CREATE FUNCTION
         param          
------------------------
 ["123",[23,0,"12:02"]]
(1 row)

UPDATE 1
         param         
-----------------------
 ["123",[1,0,"12:02"]]
(1 row)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как делать UPDATE для типа данных json в PosrgeSQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]