PostgreSQL 9.2 pg_dump 버전 불일치


141

pg_dump 도구를 사용하여 Postgresql 데이터베이스를 덤프하려고합니다 .

$ pg_dump books > books.out

이 오류가 어떻게 발생합니까?

pg_dump: server version: 9.2.1; pg_dump version: 9.1.6
pg_dump: aborting because of server version mismatch

--ignore-version옵션은 더 이상 사용되지 않으며 실제로 작동하더라도 내 문제에 대한 해결책은 아닙니다.

이 문제를 해결하기 위해 pg_dump 를 어떻게 업그레이드 할 수 있습니까?


답변:


27

pg_dump클라이언트 컴퓨터 에 PostgreSQL 9.2.1을 설치 하거나 $PGHOMEPostgreSQL 서버 컴퓨터에서 클라이언트 컴퓨터로 복사 할 수 있습니다. initdb클라이언트 시스템에는 새 클러스터 가 필요하지 않습니다 .

9.2.1 소프트웨어 설치를 완료 한 후 .bash_profile파일 에서 일부 환경 변수를 편집해야 합니다.


75

우분투에서 Heroku를 사용하는 동안이 문제가 발생했으며 다음과 같이 수정했습니다.

  1. " Linux downloads (Ubuntu) "에 설명 된대로 PostgreSQL apt 저장소를 추가하십시오 . (다른 운영 체제와 비슷한 페이지가 있습니다.)

  2. 다음을 사용하여 최신 버전 (9.3 for me)으로 업그레이드하십시오.

    sudo apt-get install postgresql
  3. 다음을 사용하여 기호 링크를 다시 작성하십시오 /usr/bin.

    sudo ln -s /usr/lib/postgresql/9.3/bin/pg_dump /usr/bin/pg_dump --force

    /usr/lib/postgresql/...위 경로 의 버전 번호는 server version수신 한 오류 의 번호 와 일치해야합니다 . 오류가이라고 표시되면 pg_dump: server version: 9.9에 링크하십시오 /usr/lib/postgresql/9.9/....


PostgreSQL을 업그레이드 할 때만 발생합니다. 방금 OS를 새로 설치했는데 아무런 문제가 없었습니다.
세스

궁금한 점이 있다면이 솔루션은 Heroku가 아닌 우분투에도 적용됩니다.
IanBussieres

2
이 답변 에서 말한 것에 따르면 , 그것은 꽤 나쁜 생각이기도합니다.
Arthur

이 대답은 폴더를 삭제하여 소프트웨어를 제거하는 것이 좋습니다. 여기서는 심볼릭 링크를 다시 만들고 있습니다.
세스

2
완전한! postgres 업그레이드 후 기호 링크 재생
Yo Ludke

61
  1. 설치된 pg_dump 버전을 확인하십시오 :

    find / -name pg_dump -type f 2>/dev/null
  2. 내 결과는 다음과 같습니다

    /usr/pgsql-9.3/bin/pg_dump
    /usr/bin/pg_dump
    
  3. 두 가지 버전이 설치되어 있습니다. 최신 버전으로 pg_dump를 업데이트하려면 :

    sudo ln -s /usr/pgsql-9.3/bin/pg_dump /usr/bin/pg_dump --force

최신 버전으로의 심볼릭 링크가 생성됩니다.


2
다음을 사용하여 버전을 찾는 것이 훨씬 더 빠릅니다.locate pg_dump
Obromios

1
IMO 2>/dev/null는 콘솔에 인쇄하는 대신 ERROR 스트림을 버리기 때문에 추가해서는 안됩니다 . 드문 경우를 제외하고는 오류가 발생하는 것을보고 싶습니다. 예를 들어, 필자의 경우 루트가 아니므로 최신 pg_dump 버전이 설치된 디렉토리를 보지 못했음을 상기시킵니다. 일반적으로 오류를 제거하지 마십시오.
Poutrathor

40

Mac에는 /usr/bin/pg_dump기본적으로 사용되는 내장 명령이 있습니다.

postgresql을 설치하면 다른 바이너리를 얻을 수 있습니다 /Library/PostgreSQL/<version>/bin/pg_dump


3
PostgreSQL의 설치 방법 (EnterpriseDB 설치 프로그램, MacPorts, Homebrew 등)에 따라 위치가 달라 지지만 사용자가 올바른 버전을 이미 설치했을 가능성이 높습니다.
Craig Ringer

3
필자의 경우 .bash_profile을 열고 "export PATH = / Applications / Postgres.app / contents / macos / bin : $ PATH"를 추가하면 마술이됩니다.
Alex Weber

29

pg_dump명령에서 전체 경로를 찾아서 사용할 수 있습니다.

locate pg_dump

/usr/bin/pg_dump
/usr/bin/pg_dumpall
/usr/lib/postgresql/9.3/bin/pg_dump
/usr/lib/postgresql/9.3/bin/pg_dumpall
/usr/lib/postgresql/9.6/bin/pg_dump
/usr/lib/postgresql/9.6/bin/pg_dumpall

이제 명령에서 원하는 버전의 경로를 사용하십시오.

/usr/lib/postgresql/9.6/bin/pg_dump books > books.out

1
CentOS 사용자의 경우 (내 버전은 6.9 Final) :sudo /usr/pgsql-<version>/bin/pg_dump <database-name> -U <username> -h localhost
Davidson Lima

@ jDub9 덤프를하는 동안 어떤 버전을 사용 했습니까? 동일한 것을 사용하고 있는지 확인하십시오
Deepak Mahakale

16

Ubuntu를 사용중인 경우 이전 버전이 postgresql-client설치 되었을 수 있습니다 . 오류 메시지의 버전을 기반으로 솔루션은 다음과 같습니다.

sudo apt-get remove postgresql-client-9.1
sudo apt-get install postgresql-client-9.2

11

PostgreSQL의 새 버전을 업그레이드하거나 다시 설치할 때마다 최신 버전 pg_dump 이 설치됩니다.

PostgreSQL/bin 시스템에 어딘가에 설치 한 PostgreSQL의 최신 버전 (9.2.1이 최신 버전) 아래에 디렉토리 가 있어야합니다 pg_dump .


10
팁 :에 Terminal.app,find / -name pg_dump -type f 2>/dev/null
크레이그 벨소리

8

Postgres.app를 실행하는 사람들을 위해 :

  1. 에 다음 코드를 추가하십시오 .bash_profile.

    export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH
  2. 터미널을 다시 시작하십시오.


7

Homebrew가 설치된 Mac의 경우. Heroku에서 DB를 가져올 때이 문제가 발생했습니다. 방금 실행 문제를 해결했습니다.

brew upgrade postgresql

6

Mac 사용자의 경우 .profile 파일 맨 위에 놓으십시오.

export PATH="/Applications/Postgres.app/Contents/MacOS/bin:$PATH"

그런 다음 실행

. ~/.profile


3

설명했듯이 postgresql이 이전 버전이기 때문에 homebrew를 통해 Mac 용으로 업데이트하십시오.

brew tap petere/postgresql,

brew install <formula>(예 : brew install petere/postgresql/postgresql-9.6)

오래된 postgre를 제거하십시오 :

brew unlink postgresql

brew link -f postgresql-9.6

오류가 발생하면 각 단계마다 추출 지침을 읽고 따르는 것을 잊지 마십시오.

자세한 내용은 https://github.com/petere/homebrew-postgresql을 참조하십시오.


3

다른 사람이 다루지 않았다고 생각하는 다른 대답.

PG 클러스터가 여러 개 설치되어있는 경우 (내가하는 것처럼)를 사용하여 볼 수 있습니다 pg_lsclusters.

표시된 목록에서 버전 및 클러스터를 볼 수 있어야합니다.

그런 다음이 작업을 수행 할 수 있습니다.

pg_dump --cluster=9.6/main books > books.out

분명히, pg_lsclusters버전과 클러스터를 / 로 분리하여 리턴 된 것에서 버전 및 클러스터 이름을 사용자 환경에 적합한 이름으로 바꾸십시오 . 실행하려는 특정 클러스터를 대상으로합니다.


1
이것은 매우 유용합니다. 혼란 스러울 때 왜 pg_dump내 클러스터 중 하나에서 작동하지 않았습니다. 내 클러스터 중 하나가 최신 버전으로 업그레이드되었을 때 기본 Postgresql 버전을 사용하고있었습니다. 클러스터를 지정하면 문제가 해결되었습니다.
Andrius

3

나에게 문제는 업데이트 psql apt-get이후에도 새로운 버전을 해결하지 못했습니다 update. 다음은 효과가있었습니다.

우분투

PostgreSQL 패키지 용 GPG 키 가져 오기부터 시작하십시오.

sudo apt-get install wget ca-certificates
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

이제 시스템에 저장소를 추가하십시오.

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'

우분투에 PostgreSQL 설치

sudo apt-get update
sudo apt-get install postgresql postgresql-contrib

https://www.postgresql.org/download/linux/ubuntu/


1
이것은 컴퓨터의 기존 실행 파일을 대체하지 않으므로 /usr/lib/postgresql/9.6/bin/pg_dump와 같은 새 버전의 pg_dump를 명시 적으로 사용하거나 / usr / bin과 같은 새로운 바로 가기를 만들어야합니다. / pg_dump96
vinh

나는 그것을 집어 들었던 새로운 것을 명시 적으로 사용할 필요가 없었습니다.
rado

2

도 커가 설치되어 있으면 다음과 같이 할 수 있습니다.

$ docker run postgres:9.2 pg_dump books > books.out

Postgres 9.2가 포함 된 Docker 컨테이너를 다운로드하고 컨테이너 pg_dump내부 에서 실행 하여 출력을 씁니다.


2

대답은 어리석게 들리지만 위의 오류가 발생하고 이전 버전에 대해 pg_dump를 실행하려면 postgres의 bin 디렉토리로 이동하여 유형을 입력하십시오

./pg_dump servername> out.sql ./은 루트를 무시하고 현재 디렉토리에서 pg_dump를 찾습니다.


2

나는 같은 오류가 있었고 이것이 내 경우에 그것을 해결 한 방법입니다. 이는 postgresql 버전이 9.2.1이지만 postgresql 서비스 9.1.6을 시작했음을 의미합니다.

당신이 실행 psql postgres하면 다음을 볼 수 있습니다 :

psql (9.2.1, server 9.1.6)

이 문제를 해결하기 위해 내가 한 일은 :

  1. brew services stop postgresql@9.1.6
  2. brew services restart postgresql@9.2.1

이제 실행 psql postgres하면 다음이 있어야합니다.psql (9.2.1)

brew services listpostgres의 상태를 확인하기 위해 실행할 수도 있습니다 .


1

** 설치 후 postgres 버전이 일치합니다 (9.2) 심볼릭 링크 또는 새 바로 가기 만들기

**-on '/ usr / bin'

syntag is = sudo ln -s [path for use] [new shortcut name]

sudo ln -s /usr/lib/postgresql/9.2/bin/pg_dump new_pg_dump

-연락 방법 : new_pg_dump -h 192.168.9.88 -U postgres database



1

데이터베이스가 다른 머신에 설치된 경우 올바른 버전의 pg_dump가 설치되었을 수 있습니다. 이는 SSH를 사용하여 pg_dump 명령을 원격으로 실행할 수 있음을 의미합니다. ssh username@dbserver pg_dump books > books.out

암호없이 실행하기 위해 공개 키 인증을 사용할 수도 있습니다. 이를 달성하기위한 단계 :

  1. ssh-keygen 명령으로 키 쌍을 생성하십시오 (아직 수행하지 않은 경우).
  2. 공개 키를 데이터베이스 서버 (일반적으로 ~ / .ssh / authorized_keys)에 복사하십시오.
  3. ssh 명령으로 연결이 작동하는지 테스트하십시오.

1

글쎄, 나는 두 개의 postgress 버전이 설치된 것과 같은 문제가있었습니다.

적절한 pg_dump를 사용하면 어떤 경우에도 변경할 필요가 없습니다.

 $> /usr/lib/postgresql/9.2/bin/pg_dump books > books.out

0

Heroku의 Postgres.app를 사용하는 경우 다른 모든 바이너리와 함께 pg_dump는 /Applications/Postgres.app/Contents/MacOS/bin/

이 경우에는

ln -s /Applications/Postgres.app/Contents/MacOS/bin/pg_dump /usr/local/bin/pg_dump

또는

ln -s /Applications/Postgres.app/Contents/MacOS/bin/* /usr/local/bin/.

그들 모두를 잡아


0

mac find / -name pg_dump -type f 2>/dev/null의 경우 pg_dump의 위치 찾기를 사용 하십시오.

나를 위해 다음과 같은 결과가 있습니다.

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dump
/usr/local/Cellar/postgresql/9.4.5_2/bin/pg_dump

을 사용하지 않으려면 다음을 sudo ln -s new_pg_dump old_pg_dump --force사용하십시오.

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dumppg_dump터미널에서 교체

예를 들면 다음과 같습니다.

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dump books > books.out

그것은 나를 위해 작동합니다!


0

적절한 postgres 버전을 여기에서 다운로드하십시오 :

https://www.postgresql.org/download/

다음 명령을 실행하십시오 (postgresql.org/download URL은 사용할 특정 URL을 생성합니다. 아래에서 사용하는 URL은 centos 7의 예일뿐입니다). sudo :

sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum install postgresql11-server

pg_dump 버전이 업데이트되었습니다. pg_dump -V로 확인하십시오.


-6

Fedora 17 설치에서 비슷한 문제가 발생했습니다. 이것이 내가 문제를 해결하기 위해 한 것입니다

  • 에서 내장 pg_dump을 삭제하십시오 /usr/bin/pg_dump(루트 : "rm / usr / bin / pg_dump").
  • 이제 postgresql 설치의 심볼릭 링크를 만드십시오.

    다시 루트로 ln -s /usr/pgsql-9.2/bin/pg_dump /usr/bin/pg_dump

그 트릭을해야합니다


9
Nonono, 패키지 관리 파일 만 삭제하지 마십시오! 가에 있다면 /usr/(보다는 /usr/local/, /home/또는 /opt/일을 삭제하면 일반적으로 OK입니다) 당신은 정말 패키지 관리자를 사용할 필요가 - rpm& yum이나 dpkgapt-getaptitude, 배포판 의존. 최신 버전을 먼저 찾도록 패키지를 설치 제거 rpm하거나 PATH환경 변수를 변경하십시오 .bash_profile. 패키지 관리 대상이 의심 스러운 경우 rpm -qf /path/to/file(RPM) 또는 dpkg -S /path/to/file(dpkg)를 사용하십시오
Craig Ringer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.