Isso tipo de pergunta aparece de tempos em tempos - até onde eu sei, a única maneira completamente confiável é fazer o que você descreveu, armazenar IDs atualizados em alguma tabela no primeiro processo e marcá-los como processados no segundo. Basicamente, isso é reinventar uma fila de mensagens no banco de dados. Você descreveu muito bem como uma solução ingênua perderá atualizações.
Ter o processo de importação marcando linhas atualizadas pode ser feito com bastante facilidade ou até mesmo implementado usando gatilhos em sua tabela de dados. Se você tiver apenas um processo consumidor, tudo o que ele precisa fazer é
delete from updated_item returning item_id
para obter uma lista de atualizações. Parece que é muito mais complicado, mas IMHO não é, na verdade. Recursos como poder monitorar o tamanho do backlog também surgem gratuitamente.