···1+ALTER TABLE documents ADD COLUMN recommend_count integer NOT NULL DEFAULT 0;
2+3+UPDATE documents d
4+SET recommend_count = (
5+ SELECT COUNT(*) FROM recommends_on_documents r WHERE r.document = d.uri
6+);
7+8+CREATE OR REPLACE FUNCTION update_recommend_count() RETURNS trigger AS $$
9+BEGIN
10+ IF TG_OP = 'INSERT' THEN
11+ UPDATE documents SET recommend_count = recommend_count + 1
12+ WHERE uri = NEW.document;
13+ ELSIF TG_OP = 'DELETE' THEN
14+ UPDATE documents SET recommend_count = recommend_count - 1
15+ WHERE uri = OLD.document;
16+ END IF;
17+ RETURN NULL;
18+END;
19+$$ LANGUAGE plpgsql;
20+21+CREATE TRIGGER trg_recommend_count
22+AFTER INSERT OR DELETE ON recommends_on_documents
23+FOR EACH ROW EXECUTE FUNCTION update_recommend_count();