Глобально заменить в поле Postgres JSONB

crowhoplaminar спросил: 14 ноября 2017 в 05:32 в: json

Мне нужно глобально заменить определенную строку, которая встречается в нескольких местах во вложенной структуре JSON, которая хранится как jsonb в таблице postgres. Например:

{
  "location": "tmp/config",
  "alternate_location": {
    "name": "config",
    "location": "tmp/config"
  }
}

... должно стать:

{
  "location": "tmp/new_config",
  "alternate_location": {
    "name": "config",
    "location": "tmp/new_config"
  }
}

я пробовал:

UPDATE files SET meta_data = to_json(replace(data::TEXT, 'tmp/config', 'tmp/new_config'));

К сожалению, это приводит к искаженному JSON с тройными кавычками.

Есть идеи, как это сделать?


0 ответов