Ошибка обновления: PG::UniqueViolation — не удалось создать уникальный индекс "unique_post_links_ccnew"

У меня стандартная установка, которая не может обновиться до версии 2.8.0.beta2 из-за следующей ошибки:

PG::UniqueViolation: ERROR:  could not create unique index "unique_post_links_ccnew"

Она возникает в ходе выполнения:

I, [2021-06-25T18:35:47.756688 #1]  INFO -- : == 20210525112226 RemoveLengthConstrainFromTopicLinkUrl: migrating ============

Похоже, что индекс не повреждён.

Поможет ли это?

[6] pry(main)> TopicLink.where(url: bad_url).pluck(:id, :topic_id, :post_id, :user_id)
=> [[15733, 14351, 63616, 911], [16131, 14505, 63986, 911], [27141, 14505, 63986, 1152]]

В итоге я просто добавил badX к дублирующимся URL, и всё заработало. Не совсем понятно, какие проблемы это может вызвать в будущем…

По нашему опыту, в старых версиях Postgres встречается множество так называемых «невозможных» багов повреждения индексов. Вы всё ещё сталкиваетесь с этим?

Думаю, я не видел этого с момента обновления до pg12.

Мы перешли на PG13, и я думаю, что это в основном решило для нас проблему (повреждённые индексы), @sam?

@saj разобрался в этой проблеме. Мы решили её на уровне нашей инфраструктуры. Большинство пользователей с собственным хостингом уже нашли обходные пути.

Механизм, который мы ранее использовали для обновления PostgreSQL в нашем образе с открытым исходным кодом, содержал некоторые внутренние проблемы безопасности из-за изменений в библиотеке libc между версиями PostgreSQL.

Полагаю, что в более широкой экосистеме эта проблема сейчас в основном устранена, хотя некоторые старые процессы обновления могут всё ещё с ней сталкиваться. Исправление нашего существующего скрипта обновления с открытым исходным кодом и работа с огромным множеством комбинаций обновлений PostgreSQL станет настоящим кошмаром.

Тем не менее, по крайней мере, мы теперь хорошо понимаем источник проблемы и лучше подготовлены к её решению в будущем.