#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 );
- Все столбцы в таблице событий были заполнены данными за вычетом столбца Фотолист. Таблица фотографий заполнена переменным количеством URL-адресов фотографий( максимум 3).
- Я преобразовал 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
вы хотите обновить с помощью этой глобальной агрегации ?