pg_dumpall — extrae un clúster de bases de datos PostgreSQL en un archivo de script
pg_dumpall [connection-option...] [option...]
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.
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.
Las siguientes opciones de línea de comandos controlan el contenido y el formato de la salida.
-a--data-onlyExporta 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=filenameEnvía la salida al archivo especificado. Si esto se omite, se utiliza la salida estándar.
-g--globals-onlyExporta 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-onlyExporta solo los roles, ninguna base de datos ni tablespace.
-s--schema-onlyExporta 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-onlyExporta solo los tablespaces, ninguna base de datos ni roles.
-v--verboseEspecifica 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--versionMuestra la versión de pg_dumpall y termina.
-x--no-privileges--no-aclEvita la exportación de privilegios de acceso (comandos grant/revoke).
--binary-upgradeEsta 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 ). 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.
tabla (columna, ...)
VALUES ...
--disable-dollar-quotingEsta 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-triggersEsta 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=ndigitsUtiliza 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-dataNo exporta los datos.
--no-policiesNo exporta políticas de seguridad a nivel de fila.
--no-publicationsNo 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-schemaNo exporta el esquema (definiciones de datos).
--no-security-labelsNo exporta etiquetas de seguridad.
--no-statisticsNo exporta estadísticas. Este es el comportamiento predeterminado.
--no-subscriptionsNo 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-methodNo 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-tablespacesNo 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-compressionNo 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-dataNo 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.
--statisticsExporta las estadísticas del optimizador.
--statistics-onlyExporta 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.
-?--helpMuestra 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=connstrEspecifica 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=usernameNombre 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--passwordFuerza 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.
PGHOSTPGOPTIONSPGPORTPGUSERPará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).
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.
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.
Consulta pg_dump para obtener detalles sobre las posibles condiciones de error.