Как обеспечить консистентность данных между БД и поисковым движком?
В программировании есть только две проблемы - именование переменных и инвалидация кэша.

Ну тут несколько вариантов:
1. Пытаться одновременно записать в обе базы.
2. Сначала писать в Postgres, как в единственный источник истины, а параллельно копировать в эластик (по расписанию или ещё как)
3. Писать в какую-нибудь брокер сообщений типа кафки, а в Postgres и ES записывать из него.

По соотношению сложность/надёжность второй вариант лучше всего
Если нужно, чтобы в Pg и ES данные попадали гарантированно и при этом как можно быстрее - вариант с брокером сообщений.
Если нужна максимальная скорость и минимальные гарантии - первый вариант.
В любой информационной системе я-бы выделял single-source-of-truth (типа главный источник правды) и этот главный источник должен быть согласован сам с собой всегда. Будет ли это дисковый файл. Kafka, или база PG - неважно. Важно что он будет арбитром в спорных ситуациях.

В ситуации с потерей электричества что вы описали - совершенно невозможно правильно восстановить обе системы. Одна из ник полюбому будет опережать другую. В high-load системах она будет опережать не на 1 на на сотню транзакций например. Честно я даже не могу придумать алгоритм восстановления. Особенно если часы где-то разошлись на милисекунду и одна из систем сделала update на уже вставленные данные.

Мне нравится вариант когда мы сразу пишем информацию в Postgres и делаем commit (по правилам которые нужны бизнесу) и дальше уже индексируем содержимое базы эластиком. После аварийного ребута я будут знать что PG содержит именно то что было закоммичено. То что нужно тоесть. Эластик будет просто догонять.