Postgres-FATAL : 데이터베이스 파일이 서버와 호환되지 않습니다


185

MacBook Pro를 재시동 한 후에 데이터베이스 서버를 시작할 수 없습니다 :

could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

로그를 확인한 후 다음 줄이 반복해서 나타납니다.

FATAL:  database files are incompatible with server
DETAIL:  The data directory was initialized by PostgreSQL version 9.2, which is not compatible with this version 9.0.4.

9.0.4는 Mac에 사전 설치된 버전이고 9.2 [.4]는 내가 Homebrew를 통해 설치 한 버전입니다. 앞에서 언급했듯이 이것은 다시 시작하기 전에 작동했기 때문에 실제로 컴파일 문제가 될 수 없습니다. 나는 또한 다시 실행 initdb /usr/local/var/postgres -E utf8하고 파일은 여전히 ​​존재합니다.

불행히도, 나는 Postgres를 처음 접했으므로 도움을 주시면 감사하겠습니다.


1
postgres를 어떻게 시작합니까? 시작 스크립트가 새 버전을 가리 킵니까? 오류 메시지를 바탕으로 두 버전이 나란히 설치되어 있다고 생각합니다.
fvu

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start-그리고 응답은server starting
klaffenboeck

1
당신이 이름의 파일을 검색 할 때 pg_ctl 나는 당신이 2 사본을 찾을 것이라고 확신합니다. 일치 which pg_ctl하는 버전은 이전 버전이고 다른 버전은 새 버전입니다.
fvu

실행은 pg_ctl --version제공pg_ctl (PostgreSQL) 9.2.4
klaffenboeck

2
@EvanCarroll 물론 그때했다. 나는 그들이 그것을 묶어서 내부로 묶고 Server.app기본 포트가 아닌 포트와 유닉스 소켓 디렉토리를 사용하도록 숨겼다 고 생각합니다. 드디어!
Craig Ringer

답변:


363

최근 10.x에서 11 또는 12 로 업그레이드 한 경우 아래 명령을 실행하여 모든 데이터를 유지하는 postgres 데이터 디렉토리를 업그레이드 할 수 있습니다.

brew postgresql-upgrade-database

위의 명령은 brew info postgres


2
이것은 매력처럼 작동했지만, 작동 한 후에 두 번째 오류가 발생했습니다. initdb로 만든 db를 업그레이드 brew postgresql-upgrade-database한 다음 postgres를 다시 시작하십시오.
Shemogumbe

9.5에서 11까지 일했습니다. 사용 방법을 보여주기위한 조언 brew info.
yacc

2
10에서 11.5까지 당신은 생명의 은인입니다. <3
Thomas

4
11 ~ 12에서도 작동합니다.
stevex

1
9.5에서 12까지 작동합니다!
Augusto Samamé Barrientos

169

핵 옵션을 찾고 있다면 (모든 데이터를 삭제하고 새로운 데이터베이스를 확보하십시오) 다음을 수행 할 수 있습니다.

rm -rf /usr/local/var/postgres && initdb /usr/local/var/postgres -E utf8

그리고 당신은해야 rake db:setup하고 rake db:migrate설치를 다시 얻을 수 있도록 레일 응용 프로그램에서.


3
위의 방법으로 문제가 해결되지 않으면 (/ 나를 위해) initdb에 새 데이터 디렉토리 이름을 지정하십시오 (예 : / usr / local / var / postgres95).
mpelzsherman

btw, 바로 다음 createuser -s your_rails_app에 레일의 postgres 사용자를 생성 하기 위해 실행해야 할 것입니다 . 참조 stackoverflow.com/questions/11919391/...
Meekohi

38

이것을 시도하십시오 : https://gist.github.com/joho/3735740

그것은 나를 위해 완벽하게 작동했습니다. 결국 DB를 확인하고 이전 클러스터를 제거하는 2 개의 bash 스크립트도 생성합니다. 정말 굉장합니다.

자세한 내용은 http://www.postgresql.org/docs/9.2/static/pgupgrade.html 을 참조하십시오 .


2
9.4에서 9.5로 마이그레이션하여 완벽하게 작동했습니다.
tftdias

또한 9.3.4에서 9.5.2로 마이그레이션하는 데 도움이되었습니다.
Steve Jorgensen

1
여기서 브루 (맥 OS)을 이용하여 9.6.1 9.5.5로 업데이트하는 단계는 : gist.github.com/giannisp/b53a76047b07751ed3ade3c1db1d2c51
Giannis이

확실히 최고의 답변이 될 것입니다 !! 그리고 데이터 손실이 없습니다.
FlorianB 2016

9

인터넷에서 발견 된이 솔루션은 저에게 잘 작동합니다.

OS X 10.10 Yosemite로 업그레이드 한 후 postgresql 서버를 시작하려고 할 때 다음 문제가 발생했습니다.

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

좋아, 서버 로그를 살펴 보자.

cat /usr/local/var/postgres/server.log

FATAL: database files are incompatible with server
DETAIL: The data directory was initialized by PostgreSQL version 9.2, which is not compatible with this version 9.3.5.

따라서 postgresql을 업그레이드 한 후 몇 단계를 수행해야합니다.

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

mv /usr/local/var/postgres /usr/local/var/postgres92

brew update

brew upgrade postgresql

initdb /usr/local/var/postgres -E utf8

pg_upgrade -b /usr/local/Cellar/postgresql/9.2.3/bin -B /usr/local/Cellar/postgresql/9.3.5_1/bin -d /usr/local/var/postgres92 -D /usr/local/var/postgres

cp /usr/local/Cellar/postgresql/9.3.5_1/homebrew.mxcl.postgresql.plist ~/Library/LaunchAgents/

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

rm -rf /usr/local/var/postgres92

그게 다야.


1
위의 단계를 사용하여 9.53에서 10.0으로 업그레이드했습니다. pg_upgrade 명령이 약간 업그레이드되었습니다. 새로운 명령은 pg_upgrade -b /usr/local/Cellar/postgresql/9.5.3/bin/ -B /usr/local/Cellar/postgresql/10.0/bin -d / usr / local / var / postgres95 -D / usr입니다. / local / var / postgres
techvineet

더 나은 솔루션 아래
Gady

8

이전 버전의 postgres를 유지하려면 brew switch다음을 사용하십시오 .

$ brew info postgresql

postgresql: stable 10.5 (bottled), HEAD
Object-relational database system
https://www.postgresql.org/
Conflicts with:
  postgres-xc (because postgresql and postgres-xc install the same binaries.)
/usr/local/Cellar/postgresql/9.6.3 (3,259 files, 36.6MB)
  Poured from bottle on 2017-07-09 at 22:15:41
/usr/local/Cellar/postgresql/10.5 (1,705 files, 20.8MB) *
  Poured from bottle on 2018-11-04 at 15:13:13

$ brew switch postgresql 9.6.3
$ brew services stop postgresql
$ brew services start postgresql

그렇지 않으면이 brew 명령을 사용하여 기존 데이터를 마이그레이션하십시오 brew postgresql-upgrade-database. 소스 코드를 확인하십시오 .


1

postgres11 마운트 볼륨으로 Postgres12를 시작하려고 할 때 발생했습니다. postgres11에 마운트 된 볼륨을 삭제하고 다시 시작하면됩니다.

이전에는 다음을 사용하고있었습니다.

docker run -d --name my_database -v /Users/champ/postgres:/var/lib/postgresql/data -p 54320:5432 postgres:11

/ Users / champ / postgres를 삭제하고 다음을 사용하여 postgres 12를 다시 시작했습니다.

docker run -d --name my_database -v /Users/champ/postgres:/var/lib/postgresql/data -p 54320:5432 postgres:12
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.