Obtener "[archiver] versión no compatible (1.13) en el encabezado del archivo" cuando se ejecuta pg_restore

165

Acabo de actualizar a postgres 10.2 en mac os que coincide con 10.2 en heroku. Estoy tratando de descargar una copia de la base de datos y restaurarla localmente. Antes de la actualización, la restauración funcionaría bien.

Corro

pg_restore --verbose --clean --no-acl --no-owner -h localhost -d database_name backup.dump

pero recibo este error:

pg_restore: [archiver] versión no compatible (1.13) en el encabezado del archivo

La base de datos parece estar funcionando bien. Es una aplicación de rieles y actualicé las gemas pg. Puedo correr rake db:createy db:migratemuy bien.

Mark Swardstrom
fuente

Respuestas:

196

Necesita actualizar sus postgres locales para obtener el último parche de seguridad del 01-03-2018, como lo Herokuhizo el 1 de marzo. Es necesario uno de los últimos lanzamientos 10.3, 9.6.8, 9.5.12, 9.4.17, y 9.3.22.

El parche de seguridad se puede encontrar aquí https://www.postgresql.org/about/news/1834/ .

Parece que el parche modificó pg_dump, probablemente es por eso que ya no podemos usar pg_restore sin ese parche para el volcado de Heroku (con el parche aplicado).

jumichot
fuente
87
brew upgrade postgresql brew postgresql-upgrade-database
gerry3
2
Utilizando Linux Mint, mi versión es la 9.5.11 y dice que está actualizada. ¿Cómo lo obligo a usar la última versión usando apt-get?
Kritz
PostgreSQL 9.5.12 está ahora en el Ubuntu 16.04 oficial de repos xenial packages.ubuntu.com/xenial/postgresql-9.5
HarlemSquirrel
66
El comentario de @ gerry3 son dos comandos separados. ¡Cuidado con copiar y pegar!
Joe Masilotti
44
encabezar los dos comandos brew upgrade postgresql && brew postgresql-upgrade-databaserealmente soluciona el problema, pero mis bases de datos locales se cayeron en el camino. ¡Haz una copia de seguridad si tienes datos críticos!
Jarvis Johnson
19

Me encontré con este mismo problema hoy, no sé si algo cambió por parte de Heroku, porque localmente estoy ejecutando 9.6 pero mi base de datos en Heroku es 9.4, por lo que no parece ser sobre la diferencia de puntos de versión ( estuvo trabajando hasta hoy.)

Si está utilizando Postgres.app ( https://postgresapp.com/ ) en una Mac, asegúrese de que esté ejecutando v2.1.3(a partir de este escrito, esa es la versión más nueva). Cuando actualiza Postgres.app, obtiene la versión de parche más reciente de Postgres (lo que probablemente está causando la falta de coincidencia que está experimentando actualmente: Heroku se ha actualizado para el último parche de seguridad y es posible que su máquina local no lo tenga).

Tuve que actualizar Postgres.app de 2.1.0 a 2.1.3 y resolvió el problema.

Canuk
fuente
12

Desde ayer (01/03/2018) también tuvimos problemas para restaurar una copia de seguridad de Heroku que se ejecuta en PostgreSQL 9.5:

pg_restore: [archiver] unsupported version (1.13) in file header

La actualización de nuestra versión de PostgreSQL de 9.5.11 a 9.5.12 solucionó el problema.

cbx
fuente
12

La primera vez que tuve este problema, así es como restauré la base de datos Heroku a mi Local:

$ rails db:drop
$ heroku pg:pull DATABASE_URL <insert local DB name> --app <app-name>
Jim Padilla
fuente
Buena solución, no lo sabía heroku pg:pull. Pero esta no es una solución adecuada, ya que aún no puede restaurar localmente un volcado de heroku anterior, también supongo que utiliza el recurso de base de datos en vivo mientras tira.
demental
1
No estoy seguro de para qué son los votos negativos. OP está literalmente preguntando "Estoy tratando de descargar una copia de la base de datos y restaurarla localmente" y estoy respondiendo esa pregunta específica.
Jim Padilla
7

Para aquellos que intentan actualizar postgresql en Ubuntu sin éxito (como comentó Johan anteriormente), intente usar el repositorio apto de PostgreSQL, como se indica en las instrucciones oficiales de descarga de PostgreSQL: https://www.postgresql.org/download/linux/ubuntu / /

deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
Diego Aragão
fuente
6

La solución para mí implicó tanto actualizar mi Postgres.app como actualizar mi homebrew local PostgreSQL.

Actualice mi Postgres.app a través de la respuesta de Canuk:

Abra Postgres.app> Buscar actualizaciones ...

Actualice mi homebrew local PostgreSQL a través del comentario de gerry3 sobre la respuesta aceptada:

brew upgrade postgresql brew postgresql-upgrade-database

alxpck
fuente
No tuve que actualizar mi PostgreSQL casero. Solo actualizar Postgres.app a la última versión fue suficiente.
mineralwasser
actualización de postgres.app solucionó mi problema
FutoRicky
6

Tuve este problema en Windows usando pgAdmin 3.

La actualización de pgAdmin 3 a pgAdmin 4 resolvió el problema para mí.

Si está utilizando una herramienta de terceros, como PgAdmin, para restaurar el archivo de volcado proporcionado, la restauración puede no tener éxito incluso con la versión de Postgres instalada actualizada. Esto se debe a que las herramientas de terceros a menudo incluyen sus propias versiones del binario pg_restore, que pueden no estar actualizadas. https://help.heroku.com/YNH1ZJUS/why-am-i-getting-pg_restore-archiver-unsupported-version-1-13-in-file-header-error-with-pg_restore

Andrés
fuente
Gracias, esto funcionó para mí. Estoy en PostgreSQL 9.5.12 y estaba usando pgAdmin 3. pgAdmin 4 pudo funcionar con pg_restoreéxito.
Alexander
5

No recomiendo actualizar su base de datos a una nueva versión principal localmente (aplique parches de seguridad) solo para arreglar esto, ya que desea que coincida con la versión que tenga en producción.

Esto lo arregló en Ubuntu 16.04, restaurando desde una base de datos Heroku.

Primero, asegúrese de tener el repositorio postgresql como se menciona en diego. Luego instale el cliente actualizado.

sudo apt-get update && sudo apt-get install postgresql-client-10

Si usted es Ubuntu 17.04 o 17.10, tenga en cuenta que el repositorio de PostgreSQL no tiene los clientes actualizados que necesita. En su lugar, querrá usar el repositorio xenial de Postgres.

Ivan
fuente
Recomiendo actualizar la base de datos, ya que es un parche de seguridad que es bastante importante si su base de datos ejecuta consultas de usuarios no confiables: wiki.postgresql.org/wiki/… "El propósito de la versión era abordar CVE-2018-1058, que describe cómo un usuario puede crear objetos con nombres similares en diferentes esquemas que pueden cambiar el comportamiento de las consultas de otros usuarios y causar un comportamiento inesperado o malicioso, también conocido como "ataque de caballo de Troya".
RobM
Me sale Unable to locate package postgresql-client-10cuando hago esto
Doug
@RobM De acuerdo. Por "no recomiendo actualizar ..." me refería a no actualizar a una versión principal que no está utilizando en producción. Sin duda, es aconsejable actualizar al último parche de seguridad dentro de una versión principal a nivel local y, por supuesto, en producción. Ajustaré la palabrería en mi respuesta para reflejar mejor mi significado.
Ivan
1
@Doug No olvides agregar primero el repositorio apropiado de postgres. Similar a lo que se describe en este comentario. stackoverflow.com/a/49116272/3975541
Ivan
4

Así es como resolví el problema en Ubuntu (16.04 LTS) donde pg_restore / pg_dump me dio una versión anterior, de psql

$ pg_restore --version
pg_restore (PostgreSQL) 9.4.8

$ psql --version
psql (PostgreSQL) 9.5.14

El problema es que tengo varias versiones de pg instaladas, y pg_restore apuntaba a la versión anterior

$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory               Log file
9.4 main    5432 online postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log
9.5 main    5433 online postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log

La solución es crear un archivo ~ / .postgresqlrc que apunte a la versión correcta

$ cat ~/.postgresqlrc

9.5 main *

Una vez hecho esto, pg_restore apunta a la versión correcta y el comando pasa por

Detalles dados aquí: /server/610777/wrong-version-of-pg-dump-on-ubuntu

Rabi Cherian
fuente
3

Encontré este problema en pgadmin III y pude solucionarlo cambiando la ubicación de los binarios:

Menú Archivo> Opciones> Rutas binarias, luego cambió "PG bin path" a postgresql / 9.x / bin en lugar de ProgramFiles / pgadmin. Restaurar funcionó bien después.

op op opself
fuente
2

Está utilizando una versión anterior del binario pg_restore que no admite la restauración del archivo de volcado proporcionado. Asegúrese de utilizar la última versión de Postgres, que debe ser superior a la siguiente versión: https://www.postgresql.org/about/news/1834/ (10.3, 9.6.8, 9.5.12, 9.4.17 y 9.3.22).

Puede verificar la versión de pg_restore que está utilizando ejecutando pg_restore --version.

Si está utilizando una herramienta de terceros, como PgAdmin, para restaurar el archivo de volcado proporcionado, la restauración puede no tener éxito incluso con la versión de Postgres instalada actualizada. Esto se debe a que las herramientas de terceros a menudo incluyen sus propias versiones del binario pg_restore, que pueden no estar actualizadas.

Vagner Dev
fuente
0

Estaba encontrando el mismo error. Actualicé a postgresql 10.3 localmente, y eso solucionó el problema para mí.

Sean McCleary
fuente
-1

Para ventanas:

Abra el símbolo del sistema ( cmd), luego vaya a la ubicación C:\Program Files\PostgreSQL\9.6\biny ejecute estos comandos:

pg_restore -U username -d dbname -1 filename.dump
pg_restore -U postgres -d app -1 G:\app09-07-2019.backup

Espero que te ayude

Reena khan
fuente
-3

Me encontré con el mismo problema hace 10 minutos y descubrí este hilo desde 2005: https://www.postgresql.org/message-id/1106163722.780395.266900%40z14g2000cwz.googlegroups.com

Básicamente, el tipo dice que el archivo de volcado está dañado.

nfilzi
fuente
3
Extraño. Creé un archivo de volcado de heroku y tuve el mismo problema. Esto nunca ha sucedido antes. Intenté actualizar postgresql de 9.6 a 10 pero no funcionó.
karantan
1
¿Estás en 10.2 o 10.3? Tienes que estar en 10.3 ahora, creo.
Jack Kinsella
Ese hilo de la lista de correo es de 2005. Hay algo recientemente cambiado aquí que es diferente del problema en ese hilo.
Yetanotherjosh