Skip to content

Instantly share code, notes, and snippets.

@egormkn
Last active January 19, 2019 23:04
Show Gist options
  • Save egormkn/ec07c4271e5011c822c2c958a7f4cd94 to your computer and use it in GitHub Desktop.
Save egormkn/ec07c4271e5011c822c2c958a7f4cd94 to your computer and use it in GitHub Desktop.
Trigger
CREATE OR REPLACE FUNCTION check_group() RETURNS TRIGGER AS
$BODY$
DECLARE
group_count integer;
musician_count integer;
BEGIN
SELECT COUNT(*) FROM artist
WHERE artist.id = NEW."groupId" AND is_group = TRUE
LIMIT 1
INTO group_count;
IF (group_count = 0) THEN
RAISE EXCEPTION 'Please, use group for membership record';
RETURN OLD;
END IF;
SELECT COUNT(*) FROM artist
WHERE artist.id = NEW."musicianId" AND is_group = FALSE
LIMIT 1
INTO musician_count;
IF (musician_count = 0) THEN
RAISE EXCEPTION 'Please, use musician for membership record';
RETURN OLD;
END IF;
RETURN NEW;
END;
$BODY$ LANGUAGE plpgsql;
CREATE TRIGGER check_group
BEFORE INSERT OR UPDATE ON membership
FOR EACH ROW EXECUTE PROCEDURE check_group();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment