postgres 18에서 백업 실패

저희 discourse 인스턴스의 데이터베이스는 로컬 컨테이너가 아니라 중앙 데이터베이스 클러스터를 사용하고 있습니다. 최근 중앙 PostgreSQL이 18.3 버전으로 업데이트되었습니다. 그런데 discourse 백업이 실패하는 것을 확인했습니다:

[2026-05-19 03:37:37] [STARTED]
[2026-05-19 03:37:37] 'system' has started the backup!
[2026-05-19 03:37:37] Marking backup as running...
[2026-05-19 03:37:37] Making sure '/var/www/discourse/tmp/backups/default/2026-05-19-033737' exists...
[2026-05-19 03:37:37] Making sure '/var/www/discourse/public/backups/default' exists...
[2026-05-19 03:37:37] Updating metadata...
[2026-05-19 03:37:37] Dumping the public schema of the database...
[2026-05-19 03:37:37] pg_dump: error: aborting because of server version mismatch
[2026-05-19 03:37:37] pg_dump: detail: server version: 18.3 (Ubuntu 18.3-1.pgdg24.04+1); pg_dump version: 15.15 (Debian 15.15-1.pgdg12+1)
[2026-05-19 03:37:37] EXCEPTION: pg_dump failed
[2026-05-19 03:37:37] /var/www/discourse/lib/backup_restore/creator.rb:173:in 'BackupRestore::Creator#dump_public_schema'
/var/www/discourse/lib/backup_restore/creator.rb:36:in 'BackupRestore::Creator#run'
/var/www/discourse/lib/backup_restore.rb:13:in 'BackupRestore.backup!'
/var/www/discourse/app/jobs/regular/create_backup.rb:10:in 'Jobs::CreateBackup#execute'

이 문제를 해결할 수 있는 아이디어가 있을까요?

이것은 PostgreSQL 클라이언트/서버 버전 불일치로 보입니다.

백업은 pg_dump 버전이 15.15인 Discourse 컨테이너에서 실행되고 있지만, 외부 PostgreSQL 서버는 18.3입니다:

server version: 18.3; pg_dump version: 15.15

Discourse 팀이 권장하지 않는 한 Discourse 컨테이너를 수정하는 것은 신중해야 합니다. 제 첫 번째 생각은 외부 데이터베이스 클러스터를 Discourse가 현재 기대하거나 지원하는 PostgreSQL 버전과 일치시키는 것입니다.

네, 이해했습니다. 이 경우 다른 프로젝트에서 동일한 데이터베이스 클러스터를 사용해야 했기 때문에 18개 이상을 사용할 수밖에 없었습니다. 음, 그렇다면 discourse를 위해 15개만 사용할 수 있는 별도의 데이터베이스 서버가 필요할 것 같습니다.

CDCK 측에서 어떤 의견이 있으신가요?

클라이언트를 제자리에서 업그레이드할 수 있을까요?

PG 18과 호환성을 입증한 것으로 보이는데, 이는 프로덕션 데이터베이스로 사용 중이므로 이 작업은 리스크가 낮을 것 같습니다.

이전에 외부 PostgreSQL 18과 더미 Discourse 설치를 사용하여 간단한 테스트를 해보았으며, 문제는 발견되지 않았습니다. 하지만 솔직히 말하면, 이는 “간단하고 대충” 한 테스트였고 “깊은” 테스트는 아니었습니다. 어쨌든 2주 동안 문제가 없이 실행되고 있으므로 괜찮다고 생각합니다. 현재까지의 유일한 문제는 Discourse 내부 백업입니다. 한편, 데이터베이스 서버 자체(LXC에서 실행 중)는 별도로 백업되고 있습니다.

과거 정책은 두 버전마다 업그레이드하는 것이었습니다. 그러나 PostgreSQL 17이 출시된 지 1.5년이 지났는데도 공식 Docker 이미지는 여전히 15를 사용하고 있으므로, 이것이 여전히 유효한 정책인지 확실하지 않습니다.

과거에 유사한 주제에 대한 토론이 거의 동일하게 존재하며 참고할 수 있습니다. 예: Any chance to upgrade the postgres-client version?

단순한 생각인데 - pg 서버에서 명령줄을 통해 직접 덤프를 만들 수 있나요?

app.yml에 코드를 추가하여 Postgres를 해당 버전으로 업데이트할 수 있습니다. 이전에 한 번 해본 적이 있지만, 메모를 찾을 수 없습니다. 가장 쉬운 방법은 컨테이너에 들어가서 올바른 Postgres 클라이언트가 설치되도록 apt 명령을 실행한 뒤 백업을 시도하는 것입니다. 백업이 정상적으로 작동하면, 해당 명령을 app.ymlexec 명령에 추가하여 다음 재빌드 후에도 자동으로 실행되도록 하면 됩니다.

직접 진행하는 데 도움이 필요하면 이메일을 보내거나 Marketplace 채널에 게시물을 올려주세요.

음, 꽤 간단했네요:

  1. ./launcher enter web_only
  2. sudo apt-get install postgresql

이렇게 하면 postgres 패키지가 V. 18로 업그레이드됩니다.
그다음 관리자 UI에서 백업을 시작했는데, 성공적으로 완료된 것 같습니다.

[2026-05-21 16:26:50] 'admin' has started the backup!
[2026-05-21 16:26:50] Marking backup as running...
[2026-05-21 16:26:50] Making sure '/var/www/discourse/tmp/backups/default/2026-05-21-162650' exists...
[2026-05-21 16:26:50] Making sure '/var/www/discourse/public/backups/default' exists...
[2026-05-21 16:26:50] Updating metadata...
[2026-05-21 16:26:50] Dumping the public schema of the database...
[2026-05-21 16:26:50] pg_dump: executing SELECT pg_catalog.set_config('search_path', '', false);
[2026-05-21 16:26:50] pg_dump: last built-in OID is 16383
[2026-05-21 16:26:50] pg_dump: reading extensions
[2026-05-21 16:26:50] pg_dump: identifying extension members
[2026-05-21 16:26:50] pg_dump: reading schemas
[2026-05-21 16:26:50] pg_dump: reading user-defined tables
[2026-05-21 16:26:50] pg_dump: reading user-defined functions
[2026-05-21 16:26:50] pg_dump: reading user-defined types
[2026-05-21 16:26:50] pg_dump: reading procedural languages
[2026-05-21 16:26:50] pg_dump: reading user-defined aggregate functions
[2026-05-21 16:26:50] pg_dump: reading user-defined operators
[2026-05-21 16:26:50] pg_dump: reading user-defined access methods
[2026-05-21 16:26:50] pg_dump: reading user-defined operator classes
[2026-05-21 16:26:50] pg_dump: reading user-defined operator families
[... .... ...]
[2026-05-21 16:26:57] Finalizing backup...
[2026-05-21 16:26:57] Creating archive: netzwissen-forum-2026-05-21-162650-v20260520064255.tar.gz
[2026-05-21 16:26:57] Making sure archive does not already exist...
[2026-05-21 16:26:57] Creating empty archive...
[2026-05-21 16:26:57] Archiving data dump...
[2026-05-21 16:26:57] Archiving uploads...
[2026-05-21 16:26:58] Removing tmp '/var/www/discourse/tmp/backups/default/2026-05-21-162650' directory...
[2026-05-21 16:26:58] Gzipping archive, this may take a while...

좋아요! 나중에 19버전으로 전환되는 일이 없도록 pg18 클라이언트 관련 항목만 특정하여 설치해 볼 것 같습니다. 또한, 매 업그레이드 때마다 수동으로 이 작업을 수행하고 싶지 않다면 app.yml 파일에 이 명령어들을 추가해야 합니다.