Emulating a CREATE ASSERTION command in Postgres
DROP FUNCTION checkFrequentFPS() CASCADE;
CREATE FUNCTION checkFrequentFPS() RETURNS TRIGGER AS '
BEGIN
IF EXISTS (SELECT p.day
FROM Played p, Games g
WHERE p.gid = g.gid AND g.type=''FPS''
GROUP BY p.day
HAVING COUNT(*)>2
) THEN
RAISE EXCEPTION ''No FPS For you!'';
END IF;
RETURN NULL;
END
'
LANGUAGE plpgsql;
CREATE TRIGGER checkFrequentFPSTrigger
AFTER INSERT ON Played
FOR EACH ROW
EXECUTE PROCEDURE checkFrequentFPS();
Implementing a trigger in Postgres
DROP FUNCTION upgradeRating() CASCADE;
CREATE FUNCTION upgradeRating() RETURNS TRIGGER AS '
DECLARE
count_user INTEGER;
BEGIN
SELECT COUNT(*)%2 INTO count_user FROM Played WHERE cid = NEW.cid;
IF count_user = 0 THEN
UPDATE Customers SET rating=rating +1 WHERE cid = NEW.cid;
END IF;
RETURN NULL;
END;
' LANGUAGE plpgsql;
CREATE TRIGGER upgradeRatingTrigger
AFTER INSERT ON Played
FOR EACH ROW
EXECUTE PROCEDURE upgradeRating();