Discourse_docker 기본 템플릿과 postgres 버전이 동기화되지 않음

안녕하세요. Postgres DB에 “pglogical” 확장 기능을 추가하는 것을 검토하고 있는데, 설치된 postgres 버전과 postgres 템플릿 및 구성 파일에 명시된 버전 사이에 불일치가 있음을 발견했습니다.

현재 설치된 postgres 버전은 v16.2(2024년 2월 출시)이지만, 구성 파일은 여전히 v13과 관련되어 있습니다. 예를 들어,

root@ip-172-31-62-223-app:/var/www/discourse# sudo -u postgres psql discourse
psql (16.2 (Debian 16.2-1.pgdg110+2), server 13.14 (Debian 13.14-1.pgdg110+2))
Type "help" for help.

discourse=# SHOW config_file;
               config_file               
-----------------------------------------
 /etc/postgresql/13/main/postgresql.conf
(1 row)

또는 postgres.template 파일은 v13까지만 포함되어 있습니다.

이 문제는 현재 pglogical 라이브러리가 v16 폴더에는 있지만 v13 폴더에는 없기 때문에 저에게만 문제가 되고 있습니다. 다음 명령어로 심볼릭 링크를 시도해 보았지만,

for i in $(ls /usr/share/postgresql/16/extension/pglogical*); do ln -s i /usr/share/postgresql/13/extension/(basename $i); done
ln -s /usr/lib/postgresql/16/lib/pglogical.so /usr/lib/postgresql/13/lib/

이러한 오류가 발생합니다.

FATAL: could not load library “/usr/lib/postgresql/13/lib/pglogical.so”:/usr/lib/postgresql/13/lib/pglogical.so: undefined symbol: shmem_request_hook

즉, 라이브러리 파일은 서로 다른 postgres 버전 간에 1:1로 대체할 수 없습니다.

결론적으로, 설치된 postgres 버전과 docker 런처가 빌드한다고 생각하는 버전 사이에 일부 격차가 있는 것으로 보입니다.

최종 목표는 pglogical을 설치하는 것이며, 컨테이너를 다시 빌드할 때 재현 가능한 솔루션(즉, 템플릿 파일에 쉽게 추가할 수 있는 파일이나 줄)을 찾는 것이 이상적입니다. 저는 더 많은 DevOps 작업을 수행할 수 있는 능력을 갖추고 있습니다(조직의 요구 사항이기도 합니다)만, 다른 분들도 이러한 격차에 부딪혀 보셨는지, 그리고 어떻게 해결하셨는지 궁금합니다.

읽어 주셔서 감사합니다!

바보 같은 나, 바보 같은 나, 바보 같은 나. pglogical 파일들이 그곳에 있는 이유는 내가

sudo apt-get install postgresql-16-pglogical

을 실행해서 파일을 설치했기 때문이다. (어제는 DevOps 관련해서 긴 하루였다.) dpkg -L postgresql-16-pglogical을 실행하니 그 이유가 드러났다…

sudo apt-get install postgresql-13-pglogical

을 실행하니 pglogical이 문제없이 실행되기 시작했다. 앞으로 더 깊이 탐구할 계획이지만, 적어도 긴급한 작업에서는 막힘이 풀렸다.

그러나 위에서 언급한 discourse_docker와 postgres의 버전 관련 내 지적은 여전히 유효하다고 생각한다.

psql --version와 docker exec data su postgres -c "echo 'select version();'|psql"|grep PostgreSQL|cut -d " " -f 3는 동일한 것이 아닙니다.

해당 이미지는 최신 클라이언트 도구를 포함하고 있으며, 이는 Discourse(아마도)가 지원하는 더 최신 버전의 PostgreSQL을 실행하는 사용자들에게 유용합니다. 또한 아직 모든 사용자를 PG15나 다른 계획된 버전으로 강제로 업데이트하도록 하지 않았습니다.

또한, 이 pglogical 라이브러리를 추가하면 1월에 discourse와 discourse_docker 저장소에 도입된 PostgreSQL 업그레이드가 확실히 깨진다는 점도 지적하고 싶습니다.