stacker.news/prisma/migrations/20220517192333_boost_denorm/migration.sql

26 lines
793 B
PL/PgSQL

-- AlterTable
ALTER TABLE "Item" ADD COLUMN "boost" INTEGER NOT NULL DEFAULT 0;
-- loop over all existing votes and denormalize them
UPDATE "Item"
SET boost = subquery.boost
FROM (SELECT "ItemAct"."itemId", SUM("ItemAct".sats) AS boost
FROM "ItemAct"
WHERE "ItemAct".act = 'BOOST'
GROUP BY "ItemAct"."itemId") subquery
WHERE "Item".id = subquery."itemId";
CREATE OR REPLACE FUNCTION boost_after_act() RETURNS TRIGGER AS $$
BEGIN
-- update item
UPDATE "Item" SET boost = boost + NEW.sats WHERE id = NEW."itemId";
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS boost_after_act ON "ItemAct";
CREATE TRIGGER boost_after_act
AFTER INSERT ON "ItemAct"
FOR EACH ROW
WHEN (NEW.act = 'BOOST')
EXECUTE PROCEDURE boost_after_act();