Advertisement
Guest User

Untitled

a guest
Jul 25th, 2016
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. CREATE FUNCTION uid_shards_fk_check_fn() RETURNS trigger AS
  3. $body$
  4. BEGIN
  5.     -- because shards_confab in herits from shards select from shards
  6.     -- checks against shards_confab too
  7.     IF SELECT NOT EXISTS(SELECT uid FROM shards WHERE uid = NEW.uid_shards) THEN
  8.         RAISE EXCEPTION '% doesn\'t have a valid foreign key into shards', NEW.name;
  9.  
  10.     END IF;
  11.     RETURN NEW;
  12. END
  13. $body$
  14. LANGUAGE 'plpgsql';
  15.  
  16.  
  17. CREATE TRIGGER uid_shards_fk_check_trig BEFORE INSERT ON collections
  18. FOR EACH ROW
  19.     EXECUTE PROCEDURE uid_shards_fk_check_fn();
  20.  
  21.  
  22. CREATE TRIGGER uid_shards_fk_check_trig BEFORE INSERT ON samples
  23. FOR EACH ROW
  24.     EXECUTE PROCEDURE uid_shards_fk_check_fn();
  25.  
  26. CREATE FUNCTION shards_delete_fn() RETURNS trigger AS
  27. $body$
  28. BEGIN
  29.     EXECUTE 'DELETE FROM samples WHERE uid_shards=$1' USING OLD.uid;
  30.     EXECUTE 'DELETE FROM collections WHERE uid_shards=$1' USING OLD.uid;
  31.     RETURN OLD;
  32. END
  33. $body$
  34. LANGUAGE 'plpgsql';
  35.  
  36. CREATE TRIGGER shards_delete BEFORE DELETE ON shards
  37. FOR EACH ROW
  38.     EXECUTE PROCEDURE shards_delete_fn();
  39.  
  40. CREATE TRIGGER shards_confab_delete BEFORE DELETE ON shards_confab
  41. FOR EACH ROW
  42.     EXECUTE PROCEDURE shards_delete_fn();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement