Зависит от того, как он умер. Случая два, и со стороны очереди они выглядят совсем по-разному.
Убит, соединение закрыто. Серверный процесс ждал следующей команды, видит, что соединение пропало, и откатывает открытую транзакцию. Блокировка строки уходит вместе с ней. status остаётся 'queued', и следующий опрос любого воркера берёт строку. Одна задача, два запуска.
Завис, соединение живо. Сеанс стоит в состоянии idle in transaction, строка заперта, и SKIP LOCKED у остальных воркеров обходит её на каждом опросе, пока жив сеанс. Итог - одна задача застряла и не видна, а при N зависших воркерах таких задач N. Для этого есть idle_in_transaction_session_timeout, по умолчанию он выключен.
Так что считайте, что задача может выполниться больше одного раза. Её внешний эффект должен переживать повтор.