Pregunta

Tengo un (producción) del servidor de base de datos PostgreSQL v9.0 correr y una máquina de desarrollo corriendo PostgreSQL v8.4. Me gustaría tomar un volcado de la base de datos de producción y utilizarlo en la máquina de desarrollo. No puedo actualizar los postgres en la máquina prog.

En la máquina de producción, corro:

pg_dump -f nvdls.db -F p -U nvdladmin nvdlstats

En el equipo de desarrollo, corro:

pg_restore -d nvdlstats -U nvdladmin nvdls.db

Y tengo este error:

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

Esto ocurre independientemente de si elijo la costumbre, el alquitrán, o en formato texto_plano cuando dumping.

una discusión línea que sugiere que debería utilizar un nuevo versión de pg_restore en la máquina dev. Probé esto simplemente copiar el binario de 9,0 a la máquina dev, pero esto no funciona (como era de esperar) debido a problemas de enlace.

Yo pensaba que el punto de utilizar un vertedero texto_plano era que sería prima SQL y portátil. Al parecer, no.

¿Cómo puedo obtener el 9,0 DB 8.4 en mi instalación?

¿Fue útil?

Solución

pg_restore es Sólo para la restauración de vertederos tomadas en el formato "a medida".

Si lo hace un "texto sin formato" vertedero tiene que usar psql para ejecutar el script SQL generado:

psql -f nvdls.db dbname username 

Otros consejos

Uso pg_dump / pg_restore para mover 9,0-8,4 no se admite -. Moviendo solamente hacia delante está soportado

Sin embargo, por lo general puede obtener los datos a través de (en un vertedero de sólo datos), y en algunos casos se puede obtener el esquema -. Pero eso es sobre todo suerte, que depende de las características que está utilizando

Se debe utilizar normalmente la versión de destino de pg_dump y pg_restore - lo que significa que en este caso se debe utilizar los binarios de 8,4. Sin embargo, se debe utilizar la versión mismo de pg_dump y pg_restore. Ambas herramientas no tendrán ningún problema en la red, por lo que no debería haber ninguna necesidad de copiar los binarios alrededor.

Y como dice a_horse_with_no_name, puede ser mejor usar pg_dump en modo de texto plano - que le permitirá a editar a mano el vertedero si es necesario. En particular, se puede hacer un sólo esquema volcado (con -s) y uno de datos sólo volcar -. Sólo el volcado esquema es probable que requiera ningún tipo de edición

Si la base de datos 9.0 contiene alguna columna bytea, entonces problemas más grandes esperan.

Estas columnas se exportará por pg_dump usando la representación "hexagonal" y aparecen en el archivo de volcado como:

pg_catalog.lowrite SELECT (0, '\ x0a2')

Cualquier versión de los postgres backend por debajo de 9,0 no puede asimilar la representación hexadecimal de bytea, y no puedo encontrar una opción para contar pg_dump en el lado de 9,0 a no utilizarlo. Ajuste el valor por defecto "bytea_output" el establecimiento de escape para ya sea la base de datos o de todo el servidor está aparentemente ignorada por pg_dump.

supongo que sería posible post-procesar el archivo de volcado y, de hecho cambiar todos los valores bytea hexagonal codificada a una escapado uno, pero el riesgo de corromper untraceably el tipo de cosas que normalmente almacenados en un bytea (imágenes, archivos PDF, etc. ) no me excita.

I resuelto este mediante la mejora de PostgreSQL desde 8.X a 9.2.4. Si está utilizando cerveza en Mac OS-X, el uso -

brew upgrade postgresql

Una vez hecho esto, basta con que la nueva instalación de Postgres se encuentra en la parte superior de su camino. Se verá algo así como (dependiendo de la ruta de instalación de la versión) -

export PATH=/usr/local/Cellar/postgresql/9.2.4/bin:$PATH

tuve misma edición. Solía ??pgdump y psql para la exportación / importación de base de datos.

1.Set PGPASSWORD

export PGPASSWORD='h0ld1tn0w';

2.Export DB con pg_dump

pg_dump -h <<host>> -U <<username>> <<dbname>> > /opt/db.out 

/opt/db.out es Ruta de vaciado. Puede especificar de su cuenta.

3.Then ajusta de nuevo PGPASSWORD de que otro host. Si el host es igual o contraseña es igual entonces esto no es necesario.

4.Import db a su otro host

psql -h <<host>> -U <<username>> -d <<dbname>> -f /opt/db.out

Si nombre de usuario es diferente a continuación, buscar y reemplazar con su nombre de usuario local en db.out archivo. Y asegúrese de que el nombre de usuario se sustituye y no de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top