Суть такова, что есть прайс(ы) ~5млн и его нужно быстро обновлять (раз в 2 часа).
Это НЕ много и совсем НЕ часто.
обновлять или удалять и заново записывать
Ложный выбор, это одна и та же операция. MVCC update = delete + insert
Но что важно - не делать update который вам действительно не нужен. Postgresql не анализирует данные в поиске пустых обновлений, update table set id = id; вам честно удвоит таблицу, хотя ничего на логическом уровне не изменится.
Профилируйте, на что реально тратите время - pg_stat_statements ответит хорошо на этот вопрос со стороны базы. Пальцем в небо - вы работаете в автокоммите и естественно 5млн пишущих операций для любой честной ACID базы - это порядком медленного IO (даже для SSD)