PostgreSQL 서버를 모두 설치해야 할 때 pg_dump와의 "서버 버전 불일치"를 어떻게 해결합니까?

PostgreSQL 서버를 모두 설치해야 할 때 pg_dump와의 "서버 버전 불일치"를 어떻게 해결합니까?

내 컴퓨터에 두 개의 PostgreSQL 서버를 설치했습니다. 하나는 9.1이고 다른 하나는 9.3입니다. 두 서버를 모두 설치해야 합니다.

그러나 pg_dump를 실행하면 버전 불일치 오류가 발생합니다.

server version: 9.3.6; pg_dump version: 9.1.15
pg_dump: aborting because of server version mismatch

어떻게 해결할 수 있나요? (두 버전 중 하나를 제거할 수 없습니다. 9.1을 먼저 설치하고 몇 달 후에 9.3을 설치했습니다.둘 다데이터베이스 서버가 설치됨).

답변1

TL;DR: 두 PostgreSQL 인스턴스가 모두 Ubuntu 패키지로 관리되는 경우(필요한 대로) --cluster백업할 PostgreSQL 인스턴스를 선택하는 옵션을 사용하면 해당 버전의 pg_dump가 자동으로 선택됩니다.

pg_dump --cluster 9.1/main [other pg_dump options]

또는

pg_dump --cluster 9.3/main [other pg_dump options].

main는 기본값일 뿐이므로 실행하여 열 pg_lsclusters에서 실제 이름을 확인하세요 Cluster.

작동 방식: Ubuntu 패키지에 의해 설치된 것은 실제로 올바른 인스턴스를 선택하고 해당 바이너리를 실행하는 것이 목적인 에 /usr/bin/pg_dump대한 소프트 링크입니다 . 기본 PostgreSQL 명령에는 존재하지 않으며, 이 다중 버전/다중 경로 문제를 해결하기 위한 Debian/Ubuntu 추가 항목입니다./usr/share/postgresql-common/pg_wrapper--cluster

psql이는 , createdb, 등 의 경우에도 동일합니다 createuser. 의 약 18개 postgres 명령이 /usr/bin실제로 에서 관리됩니다 pg_wrapper.

보다남자 pg_wrapper이상.

답변2

당신이 사용할 수있는:

sudo find / -name pg_dump

pg_dump내 경우에는 버전을 찾으려면 다음을 수행하십시오 ./usr/pgsql-9.6/bin/pg_dump

다음으로 우리는 다음을 할 수 있습니다:

sudo ln -sfn /usr/pgsql-9.6/bin/pg_dump /usr/bin/pg_dump

우리에게 필요한 업데이트를 위해

답변3

docker를 실행하는 경우 여러 설치를 관리할 필요 없이 모든 버전의 pg_dump를 실행할 수 있습니다. 그러면 /path/to/dump/to/myfilename.dumppostgres 12.5를 사용하여 파일이 작성됩니다 .

docker run --rm --network=host -v "/path/to/dump/to:/tmp/dump" \
  postgres:12.5 pg_dump -Fc -v --dbname="my_db_bame" -f "/tmp/dump/myfilename.dump"
  • --rm명령이 완료되면 컨테이너를 제거합니다.
  • --network=host컨테이너를 호스트 로컬 네트워크에 연결합니다.
  • -v ...호스트 디렉터리( /path/to/dump/to)를 컨테이너 내부의 임시 디렉터리에 마운트합니다.

마운트한 디렉터리( /tmp/dump)가 pg_dump가 쓰는 디렉터리와 동일한지 확인하기만 하면 됩니다.

그런 다음 12.5를 원하는 버전으로 변경할 수 있습니다.

관련 정보