Почему вы не используете метку времени для хранения времени, когда строка была вставлена?
Таким образом, вам не нужен дополнительный столбец row_num в таблице, и вы всегда можете «вычислить» его на лету:
SELECT person_id,
row_number() over (partition by person_id order by row_timestamp) as row_num,
row_timestamp,
row_text
FROM log_table
Конечно, если есть вероятность, что пользователь генерирует более одной записи в микро секунду, вы можете получить записи журнала с одинаковой отметкой времени.
Но даже в загруженной системе это маловероятно (но не невозможно).
Если вы не можете (или не хотите) использовать метку времени, вы всегда можете использовать последовательность, которая увеличивается для всех пользователей, а затем использовать функцию row_number () для генерации номера строки без пробелов во время извлечения (как как показано выше, просто используйте порядок в столбце, заполненном последовательностью).