Как обновить таблицу всех записей в Postgresql результатами запроса, содержащего преобразованные данные json?

#json #postgresql #aggregate-functions

Вопрос:

Я пытался обновить таблицу данными json, полученными из запроса, используя следующее:

У меня есть таблицы, определенные следующим образом:

 CREATE TABLE events( id INTEGER NOT NULL PRIMARY KEY, photoList json DEFAULT NULL, eventId INTEGER NOT NULL, eventDescription text ); CREATE TABLE photos ( id INTEGER NOT NULL PRIMARY KEY, photo1URL text, photo2URL text, photo3url text );   
  1. Все столбцы в таблице событий были заполнены данными за вычетом столбца Фотолист. Таблица фотографий заполнена переменным количеством URL-адресов фотографий( максимум 3).
  2. Я преобразовал URL-адреса из таблицы y, используя следующую команду :
 SELECT json_agg(row_to_json) AS allphotos  FROM (  SELECT row_to_json(t)   FROM (  SELECT photo1url, photo2url, photo3url   from photos p  )t )d  

Это приводит к результатам, которые содержат все URL-адреса в одном объекте json для каждой записи в таблице фотографий. Теперь моя проблема заключается в сопоставлении этого объекта json с таблицей событий ( мы можем сопоставить строку 1 с событиями в строке 1 из результатов запроса преобразования). Когда я запускаю EXPLAIN, АНАЛИЗИРУЮ запрос на обновление в сочетании с запросом преобразования с условным (ГДЕ id = ‘someId’), это приводит к примерно 550 мс для обновления одной записи. Сначала я думал о повторном просмотре всех моих данных (около 10 миллионов записей). Есть ли более эффективное решение для этого? Я новичок в базах данных в целом, и это кажется очень неэффективным.

Комментарии:

1. Какова мощность взаимосвязи между вашими таблицами events и photos : от 1 строки до 1 строки, от 1 строки до n строк, от n строк до p строк ? Ваш «запрос на преобразование» объединяет поля URL-адресов всех фотографий в photos таблице, так какие строки в таблице events вы хотите обновить с помощью этой глобальной агрегации ?