CREATE OR REPLACE FUNCTION update_product_availability() RETURNS TRIGGER LANGUAGE plpgsql AS $$ BEGIN -- When a product is newly added to an order, -- decrease the available quantity. IF TG_OP = 'INSERT' THEN UPDATE sells SET quantity = quantity - ( SELECT o.quantity FROM "order" o WHERE o.order_num = NEW.order_num ) WHERE code = NEW.code; -- If the product/order entry is modified, -- restore the old quantity and subtract the new quantity. ELSIF TG_OP = 'UPDATE' THEN UPDATE sells SET quantity = quantity + ( SELECT o.quantity FROM "order" o WHERE o.order_num = OLD.order_num ) - ( SELECT o.quantity FROM "order" o WHERE o.order_num = NEW.order_num ) WHERE code = NEW.code; END IF; RETURN NULL; END; $$; CREATE TRIGGER trg_update_product_availability AFTER INSERT OR UPDATE ON includes FOR EACH ROW EXECUTE FUNCTION update_product_availability();