在我的代码的不同部分,我必须在出现异常后重试事务。但我不知道该怎么做。这是我的测试功能:
CREATE OR REPLACE FUNCTION f() RETURNS VOID AS $$
DECLARE
user_cur CURSOR FOR SELECT * FROM "user" WHERE id < 50 limit 10;
row RECORD;
counter INTEGER DEFAULT 0;
dummy INTEGER DEFAULT 0;
BEGIN
RAISE INFO 'Start... ';
OPEN user_cur;
LOOP
FETCH user_cur INTO row;
EXIT WHEN row IS NULL;
BEGIN
UPDATE "user" SET dummy = 'dummy' WHERE id = row.id;
counter := counter + 1;
dummy := 10 / (5 % counter);
RAISE NOTICE 'dummy % , user_id %', (5 % counter), row.id;
EXCEPTION WHEN division_by_zero THEN
--What should I do here to retry transaction?
END;
END LOOP;
RAISE INFO 'Finished.';
RETURN;
END;
$$ LANGUAGE plpgsql;