@lightseeker

Что за магия с PostgreSQL?

есть такой функционал

create type t_best_asin_ranking_2 as
(
    asin    varchar,
    price   numeric,
    reviews integer,
    rating  numeric
);


DO $$ DECLARE test t_best_asin_ranking_2[];
BEGIN
    test = (SELECT array_agg(r) FROM (SELECT DISTINCT ON (asin) asin, price, rating, reviews FROM (
                        SELECT asin, price, rating, reviews
                        FROM UNNEST((SELECT array_agg(r) FROM jsonb_populate_recordset(NULL::t_best_asin_ranking_2, '[{
"asin":"B06XH9FNH1",
"price": 1.5,
"rating": 1.5,
"reviews": 1
}]') r))
) as rankings
ORDER BY asin) r);
END$$;


при выполнении он выдает ошибку
invalid input syntax for type integer: "1.5"

причем ошибка связана с полем rating

помогите пожалуйста разобраться. спасибо заранее
  • Вопрос задан
  • 174 просмотра
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
приведение массива record к массиву композитного типа позиционное, а не символьное. Поменяйте в
SELECT DISTINCT ON (asin) asin, price, reviews, raing

порядок полей на совпадающий с таковым в таблице.

убрали бы лишние подзапросы, что ли.
(SELECT array_agg(j) FROM (SELECT DISTINCT ON (j.asin) j FROM jsonb_populate_recordset(NULL::t_best_asin_ranking_2, '[{
"asin":"B06XH9FNH1",                                                                                                  
"price": 1.5,                                                                                                   
"rating": 1.5,
"reviews": 1
}]') j ORDER BY j.asin) r);

вот так хотя бы.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы