---------------------------------------------------------------------------------- --calculate_position() ---------------------------------------------------------------------------------- DROP FUNCTION calculate_position() CASCADE; CREATE FUNCTION calculate_position() RETURNS trigger AS ' BEGIN IF(TG_OP=''INSERT'') THEN UPDATE cc_playlistcontents SET position = (position + 1) WHERE (playlist_id = new.playlist_id AND position >= new.position AND id != new.id); END IF; IF(TG_OP=''DELETE'') THEN UPDATE cc_playlistcontents SET position = (position - 1) WHERE (playlist_id = old.playlist_id AND position > old.position); END IF; RETURN NULL; END; ' LANGUAGE 'plpgsql'; CREATE TRIGGER calculate_position AFTER INSERT OR DELETE ON cc_playlistcontents FOR EACH ROW EXECUTE PROCEDURE calculate_position();