powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Изменить значение из массива в строку в jsonb postgreSQL
3 сообщений из 3, страница 1 из 1
Изменить значение из массива в строку в jsonb postgreSQL
    #40130105
ruslboss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Есть такой jsonb:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
{
  "name": "Somedata",
  "attr": [
    {
      "type": "string",
      "otherdata": null,
      "info": "4cf1c0de-4ea5-439e-82be-efcf22b5c401",
    },
    {
      "type": "date",
      "otherdata": null,
      "info": [
      "eaffa971-ee96-4944-8145-4c5defa3cb2c",
      ]
    },
    {
      "type": "date",
      "otherdata": null,
      "info": "7c15ffcd-2011-4d73-8d05-65c70dab3302",
    }
  ]
}

Необходимо найти все записи, в которых существует ключ «attr», найти все ключи «info», которые имеют значение массива, и изменить значение массива на строку.

Ожидаемый результат:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
{
  "name": "Somedata",
  "attr": [
    {
      "type": "string",
      "otherdata": null,
      "info": "4cf1c0de-4ea5-439e-82be-efcf22b5c401",
    },
    {
      "type": "date",
      "otherdata": null,
      "info": "eaffa971-ee96-4944-8145-4c5defa3cb2c",
    },
    {
      "type": "date",
      "otherdata": null,
      "info": "7c15ffcd-2011-4d73-8d05-65c70dab3302",
    }
  ]
}
-------------------------------------------------------------

https://dbfiddle.uk/?rdbms=postgres_13&fiddle=507cd3d8416b5d10288c83c6769d35c4
В этом примере есть скрипт который меняет значения и возвращает нужный результат. Проблема в том, что на локальном postgres(v12,13) скрипт не выполняется, падает ошибка - [22023] ERROR: Can't extract elements from scalar.
Помогите пожалуйста это исправить и/или упростить запрос. Спасибо.
...
Рейтинг: 0 / 0
Изменить значение из массива в строку в jsonb postgreSQL
    #40130152
Swa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ruslboss,

возможно у Вас "attr" не всегда массив, проверьте, например Null

Код: plsql
1.
2.
3.
4.
...
where
  t.data ? 'attr'
  and jsonb_typeof(t.data -> 'attr') = 'array'
...
Рейтинг: 0 / 0
Изменить значение из массива в строку в jsonb postgreSQL
    #40130379
ruslboss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Swa111,

Спасибо, это пригодится. Но тут проблема с синтаксисом в локальной бд постгреса.. Мне кажется нужно скрипт переделать или как то упростить
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Изменить значение из массива в строку в jsonb postgreSQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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