pg_dumpall

pg_dumpall — extrae un clúster de bases de datos PostgreSQL en un archivo de script

Synopsis

pg_dumpall [connection-option...] [option...]

Descripción

pg_dumpall es una utilidad para escribir (exportar) todas las bases de datos de PostgreSQL de un clúster en un único archivo de script. El archivo de script contiene comandos SQL que se pueden usar como entrada para psql para restaurar las bases de datos. Lo hace llamando a pg_dump para cada base de datos en el clúster. pg_dumpall también exporta objetos globales que son comunes a todas las bases de datos, concretamente los roles de la base de datos, los tablespaces y las concesiones de privilegios para los parámetros de configuración. (pg_dump no guarda estos objetos).

Dado que pg_dumpall lee tablas de todas las bases de datos, lo más probable es que tengas que conectarte como un superusuario de la base de datos para producir una copia de seguridad completa. También necesitarás privilegios de superusuario para ejecutar el script guardado a fin de poder agregar roles y crear bases de datos.

El script SQL se escribirá en la salida estándar. Utiliza la opción -f/--file o los operadores del shell para redirigirlo a un archivo.

pg_dumpall necesita conectarse varias veces al servidor PostgreSQL (una vez por base de datos). Si utilizas la autenticación por contraseña, te solicitará una contraseña cada vez. Es conveniente tener un archivo ~/.pgpass en tales casos. Consulta Section 32.16 para más información.

Warning

Restaurar una copia de seguridad hace que el destino ejecute código arbitrario de la elección de los superusuarios de origen. Las copias de seguridad parciales y las restauraciones parciales no limitan esto. Si no se confía en los superusuarios de origen, se deben inspeccionar las sentencias SQL exportadas antes de restaurar. Ten en cuenta que el cliente que ejecuta la copia de seguridad y la restauración no necesita confiar en los superusuarios de origen o de destino.

Opciones

Las siguientes opciones de línea de comandos controlan el contenido y el formato de la salida.

-a
--data-only

Exporta solo los datos, no el esquema (definiciones de datos) ni las estadísticas.

-c
--clean

Genera comandos SQL para eliminar (DROP) todas las bases de datos, roles y tablespaces exportados antes de volver a crearlos. Esta opción es útil cuando la restauración va a sobrescribir un clúster existente. Si alguno de los objetos no existe en el clúster de destino, se informará de mensajes de error ignorables durante la restauración, a menos que también se especifique --if-exists.

-E encoding
--encoding=encoding

Crea la copia de seguridad en la codificación de caracteres especificada. Por defecto, la copia de seguridad se crea en la codificación de la base de datos. (Otra forma de obtener el mismo resultado es establecer la variable de entorno PGCLIENTENCODING a la codificación de copia de seguridad deseada).

-f filename
--file=filename

Envía la salida al archivo especificado. Si esto se omite, se utiliza la salida estándar.

-g
--globals-only

Exporta solo los objetos globales (roles y tablespaces), ninguna base de datos.

-O
--no-owner

No genera comandos para establecer la propiedad de los objetos para que coincida con la base de datos original. Por defecto, pg_dumpall emite sentencias ALTER OWNER o SET SESSION AUTHORIZATION para establecer la propiedad de los elementos de esquema creados. Estas sentencias fallarán cuando se ejecute el script a menos que sea iniciado por un superusuario (o el mismo usuario propietario de todos los objetos del script). Para hacer un script que pueda ser restaurado por cualquier usuario, pero que otorgue a ese usuario la propiedad de todos los objetos, especifica -O.

-r
--roles-only

Exporta solo los roles, ninguna base de datos ni tablespace.

-s
--schema-only

Exporta solo las definiciones de objetos (esquema), no los datos.

-S username
--superuser=username

Especifica el nombre de usuario del superusuario que se utilizará al deshabilitar los disparadores. Esto es relevante solo si se utiliza --disable-triggers. (Normalmente, es mejor omitir esto y, en su lugar, iniciar el script resultante como superusuario).

-t
--tablespaces-only

Exporta solo los tablespaces, ninguna base de datos ni roles.

-v
--verbose

Especifica el modo detallado (verbose). Esto hará que pg_dumpall escriba los tiempos de inicio/finalización en el archivo de copia de seguridad, y mensajes de progreso en la salida de error estándar. Repetir la opción hace que aparezcan mensajes de depuración adicionales en la salida de error estándar. La opción también se pasa a pg_dump.

-V
--version

Muestra la versión de pg_dumpall y termina.

-x
--no-privileges
--no-acl

Evita la exportación de privilegios de acceso (comandos grant/revoke).

--binary-upgrade

Esta opción es para uso de las utilidades de actualización en el lugar. Su uso para otros fines no está recomendado ni admitido. El comportamiento de la opción puede cambiar en futuras versiones sin previo aviso.

--column-inserts
--attribute-inserts

Exporta los datos como comandos INSERT con nombres de columna explícitos (INSERT INTO tabla (columna, ...) VALUES ...). Esto hará que la restauración sea muy lenta; es principalmente útil para realizar copias de seguridad que se puedan cargar en bases de datos que no sean de PostgreSQL.

--disable-dollar-quoting

Esta opción deshabilita el uso de la delimitación por dólares (dollar quoting) para los cuerpos de las funciones y los fuerza a ser delimitados utilizando la sintaxis de cadena estándar de SQL.

--disable-triggers

Esta opción es relevante solo cuando se crea una copia de seguridad con datos y sin esquema. Instruye a pg_dumpall para que incluya comandos para deshabilitar temporalmente los disparadores en las tablas de destino mientras se restauran los datos. Utiliza esto si tienes comprobaciones de integridad referencial u otros disparadores en las tablas que no deseas invocar durante la restauración de datos.

Actualmente, los comandos emitidos para --disable-triggers deben realizarse como superusuario. Por lo tanto, también debes especificar un nombre de superusuario con -S, o preferiblemente tener cuidado de iniciar el script resultante como superusuario.

--exclude-database=pattern

No exporta bases de datos cuyos nombres coincidan con el patrón. Se pueden excluir múltiples patrones escribiendo múltiples opciones --exclude-database. El parámetro patrón se interpreta como un patrón de acuerdo con las mismas reglas utilizadas por los comandos \d de psql (ver Patterns), por lo que también se pueden excluir múltiples bases de datos escribiendo caracteres comodín en el patrón. Al usar comodines, ten cuidado de entrecomillar el patrón si es necesario para evitar la expansión de comodines del shell.

--extra-float-digits=ndigits

Utiliza el valor especificado de extra_float_digits al exportar datos de punto flotante, en lugar de la precisión máxima disponible. Las copias de seguridad rutinarias realizadas con fines de respaldo no deberían utilizar esta opción.

--filter=filename

Especifica un nombre de archivo del cual leer patrones de bases de datos excluidas de la copia de seguridad. Los patrones se interpretan de acuerdo con las mismas reglas que --exclude-database. Para leer de la entrada estándar (STDIN), utiliza - como nombre de archivo. La opción --filter se puede especificar en conjunción con --exclude-database para excluir bases de datos, y también se puede especificar más de una vez para múltiples archivos de filtro.

El archivo enumera un patrón de base de datos por fila, con el siguiente formato:

exclude database PATTERN

Las líneas que comienzan con # se consideran comentarios y se ignoran. Los comentarios también se pueden colocar después de una fila de patrón de objeto. Las líneas en blanco también se ignoran. Consulta Patterns para saber cómo realizar el entrecomillado en los patrones.

--if-exists

Utiliza comandos DROP ... IF EXISTS para eliminar objetos en el modo --clean. Esto suprime los errores de tipo no existe que de otro modo podrían informarse. Esta opción no es válida a menos que también se especifique --clean.

--inserts

Exporta los datos como comandos INSERT (en lugar de COPY). Esto hará que la restauración sea muy lenta; es principalmente útil para realizar copias de seguridad que se puedan cargar en bases de datos que no sean de PostgreSQL. Ten en cuenta que la restauración podría fallar por completo si has reorganizado el orden de las columnas. La opción --column-inserts es más segura, aunque aún más lenta.

--load-via-partition-root

Al exportar datos para una partición de tabla, hace que las sentencias COPY o INSERT se dirijan a la raíz de la jerarquía de particionamiento que la contiene, en lugar de a la propia partición. Esto hace que la partición adecuada se vuelva a determinar para cada fila cuando se cargan los datos. Esto puede ser útil al restaurar datos en un servidor donde las filas no siempre caen en las mismas particiones que en el servidor original. Eso podría suceder, por ejemplo, si la columna de particionamiento es de tipo text y los dos sistemas tienen definiciones diferentes de la intercalación (collation) utilizada para ordenar la columna de particionamiento.

--lock-wait-timeout=timeout

No espera indefinidamente para adquirir bloqueos de tabla compartidos al comienzo de la copia de seguridad. En su lugar, falla si no se puede bloquear una tabla dentro del tiempo de espera especificado. El tiempo de espera se puede especificar en cualquiera de los formatos aceptados por SET statement_timeout.

--no-comments

No exporta comandos COMMENT.

--no-data

No exporta los datos.

--no-policies

No exporta políticas de seguridad a nivel de fila.

--no-publications

No exporta publicaciones.

--no-role-passwords

No exporta las contraseñas para los roles. Al restaurar, los roles tendrán una contraseña nula, y la autenticación por contraseña siempre fallará hasta que se establezca la contraseña. Dado que los valores de las contraseñas no se necesitan cuando se especifica esta opción, la información del rol se lee de la vista de catálogo pg_roles en su lugar de pg_authid. Por lo tanto, esta opción también ayuda si el acceso a pg_authid está restringido por alguna política de seguridad.

--no-schema

No exporta el esquema (definiciones de datos).

--no-security-labels

No exporta etiquetas de seguridad.

--no-statistics

No exporta estadísticas. Este es el comportamiento predeterminado.

--no-subscriptions

No exporta suscripciones.

--no-sync

Por defecto, pg_dumpall esperará a que todos los archivos se escriban de forma segura en el disco. Esta opción hace que pg_dumpall devuelva el control sin esperar, lo que es más rápido, pero significa que un fallo posterior del sistema operativo puede dejar corrupta la copia de seguridad. Generalmente, esta opción es útil para pruebas pero no debe utilizarse al exportar datos de una instalación de producción.

--no-table-access-method

No genera comandos para seleccionar métodos de acceso a tablas. Con esta opción, todos los objetos se crearán con el método de acceso a tablas que sea el predeterminado durante la restauración.

--no-tablespaces

No genera comandos para crear tablespaces ni para seleccionar tablespaces para los objetos. Con esta opción, todos los objetos se crearán en el tablespace que sea el predeterminado durante la restauración.

--no-toast-compression

No genera comandos para establecer métodos de compresión TOAST. Con esta opción, todas las columnas se restaurarán con la configuración de compresión predeterminada.

--no-unlogged-table-data

No exporta el contenido de las tablas no registradas (unlogged). Esta opción no tiene efecto sobre si se exportan o no las definiciones de las tablas (esquema); solo suprime la exportación de los datos de las tablas.

--on-conflict-do-nothing

Agrega ON CONFLICT DO NOTHING a los comandos INSERT. Esta opción no es válida a menos que también se especifique --inserts o --column-inserts.

--quote-all-identifiers

Fuerza el entrecomillado de todos los identificadores. Esta opción se recomienda cuando se exporta una base de datos desde un servidor cuya versión principal de PostgreSQL es diferente de la versión de pg_dumpall, o cuando la salida está destinada a cargarse en un servidor de una versión principal diferente. Por defecto, pg_dumpall entrecomilla solo los identificadores que son palabras reservadas en su propia versión principal. Esto a veces da como resultado problemas de compatibilidad al tratar con servidores de otras versiones que pueden tener conjuntos de palabras reservadas ligeramente diferentes. El uso de --quote-all-identifiers evita tales problemas, a costa de un script de copia de seguridad más difícil de leer.

--restrict-key=restrict_key

Utiliza la cadena proporcionada como la clave \restrict de psql en la salida de la copia de seguridad. Si no se especifica ninguna clave de restricción, pg_dumpall generará una aleatoria según sea necesario. Las claves solo pueden contener caracteres alfanuméricos.

Esta opción está destinada principalmente a fines de prueba y otros escenarios que requieren una salida repetible (por ejemplo, comparar archivos de copia de seguridad). No se recomienda para uso general, ya que un servidor malicioso con conocimiento previo de la clave podría inyectar código arbitrario que se ejecutará en la máquina que ejecuta psql con la salida de la copia de seguridad.

--rows-per-insert=nrows

Exporta datos como comandos INSERT (en lugar de COPY). Controla el número máximo de filas por comando INSERT. El valor especificado debe ser un número mayor que cero. Cualquier error durante la restauración hará que se pierdan solo las filas que forman parte del comando INSERT problemático, en lugar de todo el contenido de la tabla.

--statistics

Exporta las estadísticas del optimizador.

--statistics-only

Exporta solo las estadísticas, no el esquema (definiciones de datos) ni los datos. Se exportan las estadísticas del optimizador para tablas, vistas materializadas, tablas foráneas e índices.

--sequence-data

Incluye los datos de las secuencias en la copia de seguridad. Este es el comportamiento predeterminado excepto cuando se especifica --no-data, --schema-only o --statistics-only.

--use-set-session-authorization

Genera comandos SET SESSION AUTHORIZATION estándar de SQL en lugar de comandos ALTER OWNER para determinar la propiedad de los objetos. Esto hace que la copia de seguridad sea más compatible con los estándares, pero dependiendo de la historia de los objetos en la copia de seguridad, podría no restaurarse correctamente.

-?
--help

Muestra ayuda sobre los argumentos de línea de comandos de pg_dumpall y termina.

Las siguientes opciones de línea de comandos controlan los parámetros de conexión a la base de datos.

-d connstr
--dbname=connstr

Especifica los parámetros utilizados para conectarse al servidor, en forma de cadena de conexión; estos anularán cualquier opción de línea de comandos en conflicto.

La opción se llama --dbname por coherencia con otras aplicaciones cliente, pero debido a que pg_dumpall necesita conectarse a muchas bases de datos, el nombre de la base de datos en la cadena de conexión será ignorado. Utiliza la opción -l para especificar el nombre de la base de datos utilizada para la conexión inicial, que exportará objetos globales y descubrirá qué otras bases de datos deben ser exportadas.

-h host
--host=host

Especifica el nombre de host de la máquina en la que se ejecuta el servidor de bases de datos. Si el valor comienza con una barra diagonal, se utiliza como el directorio para el socket de dominio Unix. El valor predeterminado se toma de la variable de entorno PGHOST, si está configurada; de lo contrario, se intenta una conexión por socket de dominio Unix.

-l dbname
--database=dbname

Especifica el nombre de la base de datos a la que conectarse para exportar los objetos globales y descubrir qué otras bases de datos deben ser exportadas. Si no se especifica, se utilizará la base de datos postgres, y si esa no existe, se utilizará template1.

-p port
--port=port

Especifica el puerto TCP o la extensión del archivo del socket de dominio Unix local en el que el servidor escucha las conexiones. El valor predeterminado es la variable de entorno PGPORT, si está configurada, o un valor predeterminado compilado.

-U username
--username=username

Nombre de usuario con el que conectarse.

-w
--no-password

Nunca solicita una contraseña. Si el servidor requiere autenticación por contraseña y no hay una contraseña disponible por otros medios como un archivo .pgpass, el intento de conexión fallará. Esta opción puede ser útil en trabajos por lotes y scripts donde no hay ningún usuario presente para introducir una contraseña.

-W
--password

Fuerza a pg_dumpall a solicitar una contraseña antes de conectarse a una base de datos.

Esta opción nunca es indispensable, ya que pg_dumpall solicitará automáticamente una contraseña si el servidor requiere autenticación por contraseña. Sin embargo, pg_dumpall desperdiciará un intento de conexión para descubrir que el servidor requiere una contraseña. En algunos casos, vale la pena escribir -W para evitar el intento de conexión adicional.

Ten en cuenta que la solicitud de contraseña volverá a ocurrir para cada base de datos que se vaya a exportar. Normalmente, es mejor configurar un archivo ~/.pgpass en lugar de confiar en la introducción manual de contraseñas.

--role=rolename

Especifica un nombre de rol que se utilizará para crear la copia de seguridad. Esta opción hace que pg_dumpall emita un comando SET ROLE rolename después de conectarse a la base de datos. Es útil cuando el usuario autenticado (especificado por -U) carece de los privilegios necesarios para pg_dumpall, pero puede cambiar a un rol con los derechos requeridos. Algunas instalaciones tienen una política contra el inicio de sesión directo como superusuario, y el uso de esta opción permite realizar copias de seguridad sin violar la política.

Entorno

PGHOST
PGOPTIONS
PGPORT
PGUSER

Parámetros de conexión predeterminados.

PG_COLOR

Especifica si se debe usar color en los mensajes de diagnóstico. Los valores posibles son always, auto y never.

Esta utilidad, al igual que la mayoría de las demás utilidades de PostgreSQL, también utiliza las variables de entorno admitidas por libpq (ver Section 32.15).

Notas

Dado que pg_dumpall llama a pg_dump internamente, algunos mensajes de diagnóstico se referirán a pg_dump.

La opción --clean puede ser útil incluso cuando tu intención es restaurar el script de copia de seguridad en un clúster nuevo. El uso de --clean autoriza al script a eliminar y volver a crear las bases de datos integradas postgres y template1, garantizando que esas bases de datos conservarán las mismas propiedades (por ejemplo, configuración regional y codificación) que tenían en el clúster de origen. Sin la opción, esas bases de datos conservarán sus propiedades existentes a nivel de base de datos, así como cualquier contenido preexistente.

Cuando se especifica --statistics, pg_dumpall incluirá la mayoría de las estadísticas del optimizador en el archivo de copia de seguridad resultante. Esto no incluye todas las estadísticas, como aquellas creadas explícitamente con CREATE STATISTICS, las estadísticas personalizadas agregadas por una extensión, o las estadísticas recopiladas por el sistema de estadísticas acumulativas. Por lo tanto, aún puede ser útil ejecutar ANALYZE en cada base de datos después de restaurar desde un archivo de copia de seguridad para garantizar un rendimiento óptimo. También puedes ejecutar vacuumdb -a -z para analizar todas las bases de datos.

No se debe esperar que el script de copia de seguridad se ejecute completamente sin errores. En particular, debido a que el script emitirá CREATE ROLE para cada rol existente en el clúster de origen, es seguro que obtendrá un error de el rol ya existe para el superusuario inicial, a menos que el clúster de destino se haya inicializado con un nombre de superusuario inicial diferente. Este error es inofensivo y debe ignorarse. El uso de la opción --clean es probable que produzca mensajes de error inofensivos adicionales sobre objetos inexistentes, aunque puedes minimizarlos agregando --if-exists.

pg_dumpall requiere que existan todos los directorios de tablespaces necesarios antes de la restauración; de lo contrario, la creación de la base de datos fallará para las bases de datos en ubicaciones no predeterminadas.

Generalmente se recomienda utilizar la opción -X (--no-psqlrc) al restaurar una base de datos desde un script de pg_dumpall para garantizar un proceso de restauración limpio y evitar posibles conflictos con configuraciones no predeterminadas de psql. Además, debido a que el script de pg_dumpall puede incluir metacomandos de psql, puede ser incompatible con clientes distintos de psql.

Ejemplos

Para exportar todas las bases de datos:

$ pg_dumpall > db.out

Para restaurar las bases de datos a partir de este archivo, puedes utilizar:

$ psql -X -f db.out -d postgres

No es importante a qué base de datos te conectes aquí, ya que el archivo de script creado por pg_dumpall contendrá los comandos adecuados para crear y conectarse a las bases de datos guardadas. Una excepción es que si especificaste --clean, debes conectarte inicialmente a la base de datos postgres; el script intentará eliminar otras bases de datos inmediatamente, y eso fallará para la base de datos a la que estás conectado.

Véase también

Consulta pg_dump para obtener detalles sobre las posibles condiciones de error.