Отвечать на каждый конфликт уникального ключа «уже принято» кажется безопасным. Но за этим ответом прячутся три разные ситуации.
Два сервера работают с одной таблицей PostgreSQL 18, где идентификатор запроса уникален. Хранится только этот идентификатор, и на конфликт может наткнуться любой из серверов. Клиент не дождался ответа и повторяет запрос. В повторе может оказаться изменённое тело запроса. Первая попытка могла ещё до таймаута запустить внешнее действие.
ON CONFLICT DO NOTHING не пускает вторую строку. На этом его работа заканчивается. Он не сравнивает тела запросов и ничего не говорит о внешнем действии. Отмена контекста запроса в Go тоже не означает, что удалённой работы не было.
Значит, второму серверу нужно больше, чем идентификатор. Он должен отличать совпадающий повтор от изменённого входа под тем же идентификатором, а оба случая от работы, исход которой пока никому не известен. Мне нужна минимальная долговременная запись, которая даёт эти три ответа.