restaurar la base de datos de Postgres: pg_restore -vs- solo usando psql

16

Estoy volcando mi base de datos Postgres usando pg_dump (en formato de texto plano) y luego la restauro simplemente usando psql (con el-f opción).

Lo que plantea la pregunta: ¿me estoy perdiendo algo al no usar pg_restore que parece una herramienta de restauración especializada (en comparación con la genéricapsql )?

Puedo controlar opciones como deshabilitar los desencadenantes y demás mediante el uso de pg_dumpparámetros. ¿Para qué se pg_restoreusa entonces ? formatos de volcado de texto no plano?

Marcus Junius Brutus
fuente
44
Del manual : " pg_restore es una utilidad para restaurar una base de datos PostgreSQL a partir de un archivo creado por pg_dump en uno de los formatos de texto no simple "
a_horse_with_no_name

Respuestas:

19

Si creó un volcado de formato SQL, todo lo que puede usar es psql.

Si creó un volcado de formato personalizado ( pg_dump -Fc) o de formato de directorio ( pg_dump -Fd), puede y debe usar pg_restore.

Los volcados personalizados y de formato de directorio ofrecen muchas ventajas sobre los volcados de secuencias de comandos SQL simples, y los uso exclusivamente. Puede restaurar selectivamente solo algunas tablas / esquemas, puede elegir si incluir solo esquemas, solo datos o ambos en el momento de la restauración, etc. Muchas de las opciones que tiene que especificar en el pg_dumpmomento con volcados de formato SQL se pueden elegir en restaurar- tiempo si usa un volcado de formato personalizado y pg_restore.

Si no fuera por la compatibilidad con versiones anteriores, estoy seguro de que el formato predeterminado pg_dumpsería -Fc(personalizado).

No puede convertir un volcado de formato SQL en formato personalizado o en formato de directorio sin restaurarlo en una base de datos PostgreSQL y luego volcar la base de datos restaurada.

Craig Ringer
fuente
¿También es posible cambiar el nombre de las funciones por lotes y hacer la manipulación de datos como lo haría en un archivo sql con una buena expresión regular?
velop
1
No, pero puede pg_restoresin un dbnameargumento para convertirlo en un volcado de formato SQL si lo necesita. No puedes hacer lo contrario.
Craig Ringer el
@CraigRinger ¿hay alguna diferencia de velocidad con psql en comparación con pg_dump para restaurar?
Nikunj Sardhara
2
@NikunjSardhara Por lo general, no, pero pg_restoreadmite la restauración paralela, y si la usas será MUCHO más rápido.
Craig Ringer