-- -- acs_event__shift/3 -- create or replace function acs_event__shift( integer, integer, integer ) returns int4 as $$ declare shift__event_id alias for $1; -- default null, shift__start_offset alias for $2; -- default 0, shift__end_offset alias for $3; -- default 0 begin return acs_event__shift ( shift__event_id, to_interval(shift__start_offset,'days'), to_interval(shift__end_offset,'days') ); end;$$ language plpgsql; -- -- acs_event__shift/3 -- create or replace function acs_event__shift( shift__event_id integer, shift__start_offset_interval interval, shift__end_offset_interval interval ) returns int4 as $$ DECLARE rec_events record; BEGIN -- update acs_events_dates -- set start_date = start_date + shift__start_offset_interval, -- end_date = end_date + shift__end_offset_interval -- where event_id = shift__event_id; -- Can not update view, so we do it the hard way -- (as if we make the rule anyways) for rec_events in select t.* from acs_events e, timespans s, time_intervals t where e.event_id = shift__event_id and e.timespan_id = s.timespan_id and s.interval_id = t.interval_id loop update time_intervals set start_date = start_date + shift__start_offset_interval, end_date = end_date + shift__end_offset_interval where interval_id = rec_events.interval_id; end loop; return 0; END; $$ language plpgsql;