Делаем молчаливый SELECT, не прерывающий поток выполнения команд:
BEGIN;
-- ...
UPDATE mytbl SET id = 0 WHERE id IN ( -- mute select
-- наш select
SELECT SETVAL('mytbl_id_seq', (SELECT MAX(id)+1 FROM mytbl), FALSE)
);
-- ...
COMMIT;
Помещаем его для этого в условие апдейта и делаем, чтобы оно никогда не выполнилось.В данном случае мы селектом ставим номер следующий за максимальным существующим, и его возвращаем. Соответственно, обновить запись с таким id невозможно, т.к. её нет, но и результат селекта не возвращается. И выполняется следующая инструкция SQL, чего мы и добивались.