PostgreSQL 15 업그레이드 문제

안녕하세요,

아마도 1년 만에 업데이트를 진행했는데, 이로 인해 PostgreSQL 버전이 13에서 15로 변경되었습니다.

자신의 LC_LANG 설정으로 주어진 명령어를 실행해 보고 있지만, 작동하지 않으며 FATAL: data directory “/shared/postgres_data” does not exist 오류가 발생합니다. 실제로 해당 디렉토리가 존재하지 않습니다… 혹시 아이디어가 있는 분 계신가요?

/shared/postgres_old 디렉터리가 존재해야 합니다.

LC_LANG을 변경하는 것은 좋지 않은 생각이 될 가능성이 큽니다.

실제로 저는 launch rebuild app를 실행했을 때에도 질문자님과 동일한 오류인 “/bin/bash: warning: setlocale: LC_ALL: cannot change locale”가 발생하여 결국 이 게시물에 도달하게 되었습니다. 이 문제를 끝까지 해결하셨나요? 위에서 언급했듯이, docker run 명령어는 오히려 더 많은 문제를 야기했습니다.

-v /var/discourse/shared/standalone:/shared 매핑을 추가했고, 이제 조금 진전이 있습니다. 그런데 그게 원래 없었던 건 좀 이상하네요. 문제는 제 “앱”이 2024년 어딘가의 버전에서 멈춰 있는 것 같고, “rebuild”가 작동하지 않는 것 같습니다. 그냥 추측이지만요.

그래서 제 app.yml에 다음 내용을 넣었는데 잘 작동했습니다:

env:
  LC_ALL: fr_BE.UTF-8
  LANG: fr_BE.UTF-8
  LANGUAGE: fr_BE.UTF-8

의도는 LANG였는데 LC_LANG라고 쓴 거죠. 문제는 이제 다른 것으로 되돌리면 “너무 늦었다”는 겁니다. en_US.UTF-8을 시도해 봤지만 아무 반응이 없었고, rebuild는 항상 실패합니다.

현재 백업이 없고 기존 컨테이너를 재시작할 수도 없다면, PG13 템플릿으로 전환하여 먼저 작동하는 환경을 구축한 뒤 백업을 만들고, 새로운 서버를 설정한 후 해당 서버에 백업을 복원하는 방식으로 전환하는 것이 좋습니다. 데이터베이스가 비어 있는 상태에서 원하는 언어로 설정을 마친 후 복원을 수행하면, 언어 설정이 자동으로 변환될 수도 있습니다.

새로운 서버로 이전하면 기존 서버가 충돌하는 것을 방지할 수 있습니다.

불행히도 현재 이미 깨진 상태에 있습니다. 백업은 있지만, 버전 차이가 너무 크고 gem의 종속성 문제로 인해 복원이 불가능합니다. 또한 launcher가 자동으로 최신 버전을 가져오기 때문에 이전 버전으로 되돌리기도 어려워 다소 답답한 상황입니다.

LC_ALL을 설정하면 다음과 같은 결과가 나타납니다:

/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups.rb
/usr/local/bin/pups --stdin
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (fr_BE.UTF-8)
I, [2025-12-02T15:46:29.638999 #1]  INFO – : Reading from stdin
/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/cli.rb:59:in `split’: invalid byte sequence in US-ASCII (ArgumentError)

    split = conf.split("_FILE_SEPERATOR_")
                       ^^^^^^^^^^^^^^^^^^
    from /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/cli.rb:59:in `run'
    from /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/bin/pups:9:in `<top (required)>'
    from /usr/local/bin/pups:25:in `load'
    from /usr/local/bin/pups:25:in `<main>'

bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
19a63b958021df0ecbc7e21bfea95f1c5ef7b039efd669b5d4af48b05d397a58

LC_ALL을 제거하면 “./launcher rebuild app” 명령이 다음과 같은 지점에서 멈춥니다:

Performing Consistency Checks

Checking cluster versions                                   ok
Checking database user is the install user                  ok
Checking database connection settings                       ok
Checking for prepared transactions                          ok
Checking for system-defined composite types in user tables  ok
Checking for reg* data types in user tables                 ok
Checking for contrib/isn with bigint-passing mismatch       ok
Checking for user-defined encoding conversions              ok
Checking for user-defined postfix operators                 ok
Checking for incompatible polymorphic functions             ok
Checking for not-null constraint inconsistencies            ok
Creating dump of global objects                             ok
Creating dump of database schemas                           ok

lc_collate values for database “template1” do not match:  old “fr_BE.UTF-8”, new “en_US.UTF-8”

최상단 게시물에서 언급된 “수동” docker 명령을 사용할 때도 /etc/postgresql의 일부 파일을 /var/…로 링크해야 하는 등 몇 가지 파일이 누락되어 있었고, 결국 위와 동일한 오류가 발생했습니다.

새로 설치한 후 거기서 복원을 시도해 보겠습니다.

버전 차이가 너무 크다는 것은 사실이 아닐 것 같습니다. 새 서버를 설정해서 그 백업을 복원해 보셨나요? 제가 복원한 사이트보다 몇 년 더 오래된 백업을 복원한 적도 있습니다. 잘 될 것이라고 꽤 확신합니다. 저는 한 달에 여러 번 사이트를 새 서버로 이전합니다. 문제가 발생한 유일한 경우는 인덱스가 손상되었을 때였는데, 그건 꽤 오래전에 본 적이 있습니다.

postgres_old을 postgres_data로 이름 변경하고

./launcher start app

을 시도해 보셨나요?

오. 좋은 아이디어네요! 답장하기 전에 전체 게시물을 읽어야 했는데. :slight_smile:

LC_ALL이 설정된 상태에서 신규 설치도 위와 동일한 방식으로 깨진다는 것을 확인했습니다(_FILE_SEPERATOR_ …). 하지만 LC_ALL을 설정하지 않으면 정상적으로 동작합니다.

최신 master에서 새로 설치하여 내 세이브를 복구할 수 있었습니다. 감사합니다. 이 문제들을 수정하는 것은 여전히 미스터리로 남을 것 같습니다…

좋아요!

이 내용을 새 주제로 이동했습니다. 만약 제 답변 중 하나가 해결책이었다면, 자동 종료를 위해 해당 답변을 해결책으로 표시해 주세요.