Postgres - FATAL: arquivos de banco de dados são incompatíveis com o servidor

185

Após reiniciar o meu MacBook Pro, não consigo iniciar o servidor de banco de dados:

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"?

Eu verifiquei os logs e a seguinte linha aparece repetidamente:

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 foi a versão que veio pré-instalada no mac, 9.2 [.4] é a versão que instalei via Homebrew. Como mencionado, isso costumava funcionar antes da reinicialização, portanto não pode ser um problema de compilação. Também executei novamente initdb /usr/local/var/postgres -E utf8e o arquivo ainda existe.

Infelizmente, sou muito novo no Postgres, portanto qualquer ajuda seria muito apreciada.

klaffenboeck
fonte
1
Como você inicia o postgres? Tem certeza de que o seu código de inicialização aponta para a nova versão? Porque com base nas mensagens de erro, acho que as duas versões estão instaladas lado a lado agora.
FVU
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start- e a resposta éserver starting
klaffenboeck
1
Quando você pesquisa arquivos denominados pg_ctl , tenho certeza de que encontrará duas cópias. E a que corresponder which pg_ctlserá a versão antiga e a outra será a nova versão.
Fevu
execução pg_ctl --versionpg_ctl (PostgreSQL) 9.2.4
klaffenboeck
2
@EvanCarroll Claro que sim. Eu acho que agora eles o moveram para agrupá-lo dentro Server.appe o ocultaram para usar uma porta não padrão e um diretório de soquete unix. Finalmente!
Craig Ringer

Respostas:

363

Se você atualizou recentemente para 11 ou 12 da 10.x, é possível executar o comando abaixo para atualizar o diretório de dados do postgres, mantendo todos os dados:

brew postgresql-upgrade-database

O comando acima é obtido da saída de brew info postgres

Gowtham Gopalakrishnan
fonte
2
Isso funcionou como um encanto, no entanto, depois de ter trabalhado, introduziu um segundo erro, lembre-se de upgrate db criado por initdb usando brew postgresql-upgrade-databasepostgres reinicie
Shemogumbe
Trabalhou em 9,5 a 11 também. Parabéns por também mostrar como usar brew info.
yacc
2
De 10 a 11,5. Você é um salva-vidas. <3
Thomas
4
Funciona para 11 a 12 também.
Stevex 11/12/19
1
Trabalhos de 9,5 a 12 !!
Augusto Samamé Barrientos 23/01
169

Se você estiver procurando pela opção nuclear (exclua todos os dados e obtenha um novo banco de dados), poderá:

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

e então você precisa rake db:setupe rake db:migratede sua aplicação Rails para começar a instalação novamente.

Meekohi
fonte
3
Se o acima exposto ainda não funcionar (o que foi o meu caso), tente atribuir um novo nome de diretório de dados ao initdb, por exemplo, / usr / local / var / postgres95.
Mpelzsherman
btw, imediatamente após isso, você provavelmente precisará executar createuser -s your_rails_apppara criar o usuário do postgres dos rails. Veja stackoverflow.com/questions/11919391/…
Meekohi
38

Tente isso: https://gist.github.com/joho/3735740

Funcionou perfeitamente para mim. No final, ele também gera 2 scripts bash para verificar seu banco de dados e remover o cluster antigo. Realmente fantástico.

consulte: http://www.postgresql.org/docs/9.2/static/pgupgrade.html para entender mais.

gdurelle
fonte
2
Funcionou perfeitamente para mim com a migração de 9,4 para 9,5.
tftdias 02/02
Também trabalhei para mim com a migração do 9.3.4 para o 9.5.2.
Steve Jorgensen
1
Aqui estão as etapas para atualizar 9.5.5 para 9.6.1 usando o Homebrew (macOS): gist.github.com/giannisp/b53a76047b07751ed3ade3c1db1d2c51
Giannis
Definitivamente, essa deve ser a melhor resposta! E sem perda de dados.
FlorianB 4/12
9

Encontrada na internet, esta solução funciona bem para mim.

Quando tentei iniciar o servidor postgresql após a atualização para o OS X 10.10 Yosemite, encontrei um próximo problema:

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"?

Ok, vamos dar uma olhada nos logs do servidor:

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.

Portanto, precisamos seguir algumas etapas após a atualização do 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

É isso aí.

Gianluca Musa
fonte
1
Eu usei as etapas acima para atualizar da 9.53 para a 10.0. O comando pg_upgrade foi atualizado um pouco. O novo comando é 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 27/10/17
melhor solução abaixo #
Gady 15/05/19
8

Se você deseja manter a versão anterior do postgres, use 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

Caso contrário, considere este comando bebida para migrar dados existentes: brew postgresql-upgrade-database. Confira o código fonte .

peresleguine
fonte
1

Isso aconteceu comigo quando eu estava tentando iniciar o Postgres12 com o volume montado do postgres11. Apenas excluir o volume montado para o postgres11 e reiniciar funcionou para mim.

Anteriormente eu estava usando:

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

Excluí / Users / champ / postgres e reiniciei o postgres 12, usando

docker run -d --name my_database -v /Users/champ/postgres:/var/lib/postgresql/data -p 54320:5432 postgres:12
anuj kumar
fonte