Advertisement
Guest User

Untitled

a guest
Jan 18th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.79 KB | None | 0 0
  1. create table parent(
  2. id SERIAL PRIMARY KEY,
  3. numchildren integer not null default 0
  4. );
  5.  
  6. create table child(
  7. id serial primary key
  8. parent_id integer NOT NULL REFERENCES parent(id)
  9. );
  10.  
  11. CREATE OR REPLACE FUNCTION run_after_change() RETURNS TRIGGER AS $$
  12. BEGIN
  13. IF TG_OP = 'DELETE' THEN
  14. UPDATE parent SET numchildren = (SELECT COUNT(*) FROM child WHERE OLD.parent_id = parent.id) WHERE OLD.parent_id = parent.id;
  15. RETURN OLD;
  16. ELSIF TG_OP = 'UPDATE' OR TG_OP = 'INSERT' THEN
  17. UPDATE parent SET numchildren = (SELECT COUNT(*) FROM child WHERE NEW.parent_id = parent.id) WHERE NEW.parent_id = parent.id;
  18. RETURN NEW;
  19. END IF;
  20. END; $$ language 'plpgsql';
  21.  
  22. CREATE TRIGGER after_change
  23. AFTER DELETE OR INSERT OR UPDATE ON child
  24. FOR EACH ROW EXECUTE PROCEDURE run_after_change();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement