pfaffman
(Jay Pfaffman)
1
표준 설치 환경에서 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]]
결국 중복된 URL 뒤에 badX를 붙여서 처리했고, 그 후에는 정상적으로 작동했습니다. 다만 이 방식이 향후 어떤 문제를 일으킬 수 있을지 정확히 파악이 되지 않습니다…
우리의 경험상, 이전 버전의 Postgres에는 이른바 "불가능"하다고 여겨지던 인덱스 손상 버그가 꽤 많았습니다. 여전히 이런 문제가 발생하고 있나요?
pfaffman
(Jay Pfaffman)
3
pg12로 업그레이드한 이후로 본 적이 없는 것 같습니다.
우리는 PG13까지 전부 업데이트했고, 이게 (손상된 인덱스 문제를) 우리에게 거의 해결해 주었다고 생각합니다. @sam, 맞나요?
sam
(Sam Saffron)
5
@saj 님이 이 문제의 원인을 파악했습니다. 우리는 인프라 측면에서 이를 해결했으며, 대부분의 셀프 호스터도 이미 우회 방법을 찾아 적용했습니다.
과거에 오픈소스 이미지에서 PostgreSQL(PG)을 업그레이드할 때 사용했던 메커니즘에는 PG 버전 간에 내부적으로 libc가 변경되는 문제로 인해 본질적인 안전성 문제가 있었습니다.
현재 이 문제는 생태계 전반에서 대부분 사라졌다고 보지만, 오래된 업그레이드 환경에서는 여전히 영향을 받을 수 있습니다. 기존 오픈소스 업그레이드 스크립트를 수정하고 방대한 PG 업그레이드 조합을 다루는 일은 매우 까다로울 것입니다.
그럼에도 불구하고 이제는 문제의 원인을 명확히 인지하고 있으므로, 향후 이를 더 효과적으로 대응할 수 있는 준비가 되어 있습니다.