+ print " creating triggers ";
+ $dbh->do( qq{
+ create or replace function backup_parts_check() returns trigger as '
+ declare
+ b_parts integer;
+ b_counted integer;
+ b_id integer;
+ begin
+ if (TG_OP=''UPDATE'') then
+ b_id := old.id;
+ b_parts := old.parts;
+ elsif (TG_OP = ''INSERT'') then
+ b_id := new.id;
+ b_parts := new.parts;
+ end if;
+ b_counted := (select count(*) from backup_parts where backup_id = b_id);
+ if ( b_parts != b_counted ) then
+ raise exception ''Update of backup % aborted, requested % parts and there are really % parts'', b_id, b_parts, b_counted;
+ end if;
+ return null;
+ end;
+ ' language plpgsql;
+
+ create trigger do_backup_parts_check
+ after insert or update or delete on backups
+ for each row execute procedure backup_parts_check();
+ });