···11+ALTER TABLE documents ADD COLUMN recommend_count integer NOT NULL DEFAULT 0;
22+33+UPDATE documents d
44+SET recommend_count = (
55+ SELECT COUNT(*) FROM recommends_on_documents r WHERE r.document = d.uri
66+);
77+88+CREATE OR REPLACE FUNCTION update_recommend_count() RETURNS trigger AS $$
99+BEGIN
1010+ IF TG_OP = 'INSERT' THEN
1111+ UPDATE documents SET recommend_count = recommend_count + 1
1212+ WHERE uri = NEW.document;
1313+ ELSIF TG_OP = 'DELETE' THEN
1414+ UPDATE documents SET recommend_count = recommend_count - 1
1515+ WHERE uri = OLD.document;
1616+ END IF;
1717+ RETURN NULL;
1818+END;
1919+$$ LANGUAGE plpgsql;
2020+2121+CREATE TRIGGER trg_recommend_count
2222+AFTER INSERT OR DELETE ON recommends_on_documents
2323+FOR EACH ROW EXECUTE FUNCTION update_recommend_count();