У меня есть материализованное представление, которое в основном отслеживает все ваучеры, использованные при оформлении заказа, так что я могу отслеживать, сколько было использовано, сколько осталось и т. Д. Я только что заметил, что материализованное представление не обновится. показывает следующее:
Где left
очевидно уменьшается по мере использования ваучеров (тип ваучера и ваучеры, используемые вместе с идентификатором пользователя, который его использовал, находятся в разных таблицах). Однако он обнаружил, что один ваучер использовался, но что касается двух других, которые я использовал при тестировании, он не заберет их из таблицы, где хранятся использованные ваучеры, и обновит MV.
Вот часть миграции, которую я сейчас выполняю для создания MV:
exports.up = function(knex, Promise) {
return knex.schema
.raw(`
CREATE MATERIALIZED VIEW mv_vouchers as
SELECT v.voucher_id, v.quantity, COUNT(ov.voucher_id) AS "used", v.quantity - COUNT(ov.voucher_id) AS "left"
FROM public.vouchers v LEFT OUTER JOIN
public.order_vouchers ov
ON v.voucher_id = ov.voucher_id
GROUP BY v.voucher_id, v.quantity;
`);
};
У меня такое ощущение, что я неправильно использовал материализованное представление и что он выполнил запрос в процессе миграции только один раз (когда я изначально реализовал mv).
EDIT
Для дополнительной информации вот еще две таблицы, которые у меня есть:
ваучеры:
order_vouchers: