Postgres - FATAL: los archivos de la base de datos son incompatibles con el servidor


186

Después de reiniciar mi MacBook Pro, no puedo iniciar el servidor de la base de datos:

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

Revisé los registros y la siguiente línea aparece una y otra vez:

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 fue la versión que vino preinstalada en la Mac, 9.2 [.4] es la versión que instalé a través de Homebrew. Como se mencionó, esto solía funcionar antes del reinicio, por lo que en realidad no puede ser un problema de compilación. También volví a ejecutar initdb /usr/local/var/postgres -E utf8y el archivo todavía existe.

Desafortunadamente, soy bastante nuevo en Postgres, por lo que cualquier ayuda sería muy apreciada.


1
¿Cómo comienzas postgres? ¿Está seguro de que su indicativo apunta a la nueva versión? Debido a los mensajes de error, creo que ambas versiones están instaladas una al lado de la otra ahora.
fvu

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start- y la respuesta esserver starting
klaffenboeck

1
Cuando busque archivos con el nombre pg_ctl , estoy bastante seguro de que encontrará 2 copias. Y el que coincida which pg_ctlserá la versión anterior, y el otro será la nueva versión.
fvu

correr pg_ctl --versiondapg_ctl (PostgreSQL) 9.2.4
klaffenboeck

2
@EvanCarroll Sure lo hizo entonces. Creo que ahora lo han movido para agruparlo dentro Server.appy lo han ocultado para usar un puerto no predeterminado y un directorio de socket Unix. ¡Finalmente!
Craig Ringer

Respuestas:


367

Si recientemente actualizó a 11 o 12 desde 10.x , puede ejecutar el siguiente comando para actualizar su directorio de datos postgres que retiene todos los datos:

brew postgresql-upgrade-database

El comando anterior se toma de la salida de brew info postgres


2
Esto funcionó de maravilla, sin embargo, después de que funcionó, introdujo un segundo error, recuerde actualizar la base de datos creada por initdb usando brew postgresql-upgrade-databaseluego reiniciar postgres
Shemogumbe

Trabajó en 9.5 a 11 también. Felicitaciones por mostrar también cómo usar brew info.
yacc

2
De 10 a 11.5. Eres un salvavidas. <3
Thomas

44
Funciona de 11 a 12 también.
stevex

1
Funciona de 9.5 a 12 !!
Augusto Samamé Barrientos

169

Si está buscando la opción nuclear (elimine todos los datos y obtenga una nueva base de datos), puede hacer lo siguiente:

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

y luego necesitará desde rake db:setupy rake db:migratehacia su aplicación Rails para volver a configurarlo.


3
Si lo anterior aún no funciona (que fue el caso para mí), intente darle un nuevo nombre de directorio de datos a initdb, por ejemplo / usr / local / var / postgres95.
mpelzsherman 01 de

por cierto, inmediatamente después de esto, probablemente deba ejecutar createuser -s your_rails_apppara crear el usuario postgres de los rieles. Ver stackoverflow.com/questions/11919391/…
Meekohi

38

Pruebe esto: https://gist.github.com/joho/3735740

Funcionó perfectamente para mí. Al final, también genera 2 scripts de bash para verificar su base de datos y eliminar el clúster anterior. Realmente asombroso.

ver: http://www.postgresql.org/docs/9.2/static/pgupgrade.html para entender más.


2
Me funcionó perfectamente con la migración de 9.4 a 9.5.
tftdias

También funcionó para mí con la migración de 9.3.4 a 9.5.2.
Steve Jorgensen

1
Estos son los pasos para actualizar 9.5.5 a 9.6.1 usando Homebrew (macOS): gist.github.com/giannisp/b53a76047b07751ed3ade3c1db1d2c51
Giannis

¡Esa definitivamente debería ser la mejor respuesta! Y sin pérdida de datos.
FlorianB

9

Encontrado en internet, esta solución funciona bien para mí.

Cuando intenté iniciar el servidor postgresql después de actualizar a OS X 10.10 Yosemite, me encontré con un siguiente 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"?

Bien, echemos un vistazo a los registros del 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.

Por lo tanto, debemos seguir algunos pasos después de la actualización 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

Eso es.


1
He utilizado los pasos anteriores para actualizar de 9.53 a 10.0. El comando pg_upgrade se ha actualizado un poco. El nuevo comando es 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

mejor solución a continuación
Gady

8

Si desea conservar la versión anterior de 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

De lo contrario, considere este comando cerveza para migrar los datos existentes: brew postgresql-upgrade-database. Mira el código fuente .


1

Me ocurrió cuando estaba tratando de iniciar Postgres12 con el volumen montado postgres11. Simplemente eliminar el volumen montado para postgres11 y reiniciar funcionó para mí.

Anteriormente estaba usando:

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

Eliminé / Users / champ / postgres y reinicié postgres 12, usando

docker run -d --name my_database -v /Users/champ/postgres:/var/lib/postgresql/data -p 54320:5432 postgres:12
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.