Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- create table parent(
- id SERIAL PRIMARY KEY,
- numchildren integer not null default 0
- );
- create table child(
- id serial primary key
- parent_id integer NOT NULL REFERENCES parent(id)
- );
- CREATE OR REPLACE FUNCTION run_after_change() RETURNS TRIGGER AS $$
- BEGIN
- IF TG_OP = 'DELETE' THEN
- UPDATE parent SET numchildren = (SELECT COUNT(*) FROM child WHERE OLD.parent_id = parent.id) WHERE OLD.parent_id = parent.id;
- RETURN OLD;
- ELSIF TG_OP = 'UPDATE' OR TG_OP = 'INSERT' THEN
- UPDATE parent SET numchildren = (SELECT COUNT(*) FROM child WHERE NEW.parent_id = parent.id) WHERE NEW.parent_id = parent.id;
- RETURN NEW;
- END IF;
- END; $$ language 'plpgsql';
- CREATE TRIGGER after_change
- AFTER DELETE OR INSERT OR UPDATE ON child
- FOR EACH ROW EXECUTE PROCEDURE run_after_change();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement