pg_basebackup

pg_basebackup — realiza una copia de seguridad base (base backup) de un clúster de PostgreSQL

Synopsis

pg_basebackup [option...]

Descripción

pg_basebackup se utiliza para realizar una copia de seguridad base de un clúster de bases de datos PostgreSQL en ejecución. La copia de seguridad se toma sin afectar a otros clientes de la base de datos, y se puede usar tanto para la recuperación en el tiempo (point-in-time recovery, ver Section 25.3) como punto de partida para un servidor en espera de envío de registros (log-shipping) o de replicación en flujo (streaming-replication standby) (ver Section 26.2).

pg_basebackup puede realizar una copia de seguridad base completa o incremental de la base de datos. Cuando se utiliza para realizar una copia de seguridad completa, realiza una copia exacta de los archivos del clúster de la base de datos. Cuando se utiliza para realizar una copia de seguridad incremental, algunos archivos que habrían formado parte de una copia de seguridad completa pueden ser reemplazados con versiones incrementales de los mismos archivos, que contienen solo aquellos bloques que se han modificado desde la copia de seguridad de referencia. Una copia de seguridad incremental no se puede utilizar directamente; en su lugar, primero se debe utilizar pg_combinebackup para combinarla con las copias de seguridad anteriores de las que depende. Consulta Section 25.3.3 para obtener más información sobre las copias de seguridad incrementales, y Section 25.3.5 para conocer los pasos para recuperarse a partir de una copia de seguridad.

En cualquier modo, pg_basebackup se asegura de que el servidor entre y salga del modo de copia de seguridad automáticamente. Las copias de seguridad siempre se realizan de todo el clúster de la base de datos; no es posible realizar copias de seguridad de bases de datos individuales u objetos de la base de datos. Para copias de seguridad selectivas, se debe utilizar otra herramienta como pg_dump.

La copia de seguridad se realiza a través de una conexión normal de PostgreSQL que utiliza el protocolo de replicación. La conexión debe realizarse con un ID de usuario que tenga permisos de REPLICATION (ver Section 21.2) o sea un superusuario, y pg_hba.conf debe permitir la conexión de replicación. El servidor también debe estar configurado con max_wal_senders establecido en un valor lo suficientemente alto como para proporcionar al menos un walsender para la copia de seguridad más uno para la transmisión de WAL (si se utiliza).

Pueden ejecutarse múltiples pg_basebackups al mismo tiempo, pero generalmente es mejor desde el punto de vista del rendimiento realizar solo una copia de seguridad y copiar el resultado.

pg_basebackup puede realizar una copia de seguridad base no solo de un servidor primario sino también de uno en espera (standby). Para realizar una copia de seguridad de un standby, configura el standby para que pueda aceptar conexiones de replicación (es decir, establece max_wal_senders y hot_standby, y configura su pg_hba.conf de manera apropiada). También necesitarás habilitar full_page_writes en el primario.

Ten en cuenta que existen algunas limitaciones al realizar una copia de seguridad desde un standby:

  • El archivo de historial de copias de seguridad no se crea en el clúster de la base de datos respaldado.

  • pg_basebackup no puede forzar al standby a cambiar a un nuevo archivo WAL al final de la copia de seguridad. Cuando estás utilizando -X none, si la actividad de escritura en el primario es baja, pg_basebackup puede necesitar esperar mucho tiempo para que el último archivo WAL requerido para la copia de seguridad sea cambiado y archivado. En este caso, puede ser útil ejecutar pg_switch_wal en el primario para provocar un cambio inmediato de archivo WAL.

  • Si el standby es promovido a primario durante la copia de seguridad, la copia de seguridad falla.

  • Todos los registros WAL requeridos para la copia de seguridad deben contener suficientes escrituras de página completa, lo que requiere que habilites full_page_writes en el primario.

Cada vez que pg_basebackup está realizando una copia de seguridad base, la vista pg_stat_progress_basebackup del servidor informará del progreso de la copia de seguridad. Consulta Section 27.4.6 para más detalles.

Opciones

Las siguientes opciones de línea de comandos controlan la ubicación y el formato de la salida:

-D directory
--pgdata=directory

Establece el directorio de destino en el que escribir la salida. pg_basebackup creará este directorio (y cualquier directorio padre faltante) si no existe. Si ya existe, debe estar vacío.

Cuando la copia de seguridad está en formato tar, el directorio de destino se puede especificar como - (guion), lo que hace que el archivo tar se escriba en la salida estándar (stdout).

Esta opción es requerida.

-F format
--format=format

Selecciona el formato para la salida. format puede ser uno de los siguientes:

p
plain

Escribe la salida como archivos planos, con la misma estructura que el directorio de datos y los tablespaces del servidor de origen. Cuando el clúster no tiene tablespaces adicionales, toda la base de datos se colocará en el directorio de destino. Si el clúster contiene tablespaces adicionales, el directorio de datos principal se colocará en el directorio de destino, pero todos los demás tablespaces se colocarán en la misma ruta absoluta que tienen en el servidor de origen. (Consulta --tablespace-mapping para cambiar eso).

Este es el formato predeterminado.

t
tar

Escribe la salida como archivos tar en el directorio de destino. El contenido del directorio de datos principal se escribirá en un archivo llamado base.tar, y cada uno de los otros tablespaces se escribirá en un archivo tar independiente con el nombre del OID de ese tablespace.

Si el directorio de destino se especifica como - (guion), el contenido del tar se escribirá en la salida estándar, lo que resulta adecuado para enviarlo mediante tubería a (por ejemplo) gzip. Esto solo está permitido si el clúster no tiene tablespaces adicionales y no se utiliza la transmisión de WAL.

-i old_manifest_file
--incremental=old_manifest_file

Realiza una copia de seguridad incremental. Se debe proporcionar el manifiesto de copia de seguridad de la copia de seguridad de referencia, el cual se subirá al servidor, que responderá enviando la copia de seguridad incremental solicitada.

-R
--write-recovery-conf

Crea un archivo standby.signal y añade los parámetros de conexión al archivo postgresql.auto.conf en el directorio de destino (o dentro del archivo de archivo base cuando se utiliza el formato tar). Esto facilita la configuración de un servidor en espera utilizando los resultados de la copia de seguridad.

El archivo postgresql.auto.conf registrará los parámetros de conexión y, si se especifica, el slot de replicación que está utilizando pg_basebackup, de modo que la replicación en flujo y la sincronización de slots de replicación lógica utilicen la misma configuración más adelante. El dbname se registrará solo si se especificó explícitamente en la cadena de conexión o en la variable de entorno.

-t target
--target=target

Instruye al servidor dónde colocar la copia de seguridad base. El destino predeterminado es client, que especifica que la copia de seguridad debe enviarse a la máquina donde se está ejecutando pg_basebackup. Si en su lugar el destino se establece en server:/alguna/ruta, la copia de seguridad se almacenará en la máquina donde se está ejecutando el servidor, en el directorio /alguna/ruta. Almacenar una copia de seguridad en el servidor requiere privilegios de superusuario o tener privilegios del rol pg_write_server_files. Si el destino se establece en blackhole, los contenidos se descartan y no se almacenan en ningún lugar. Esto solo debe usarse para fines de prueba, ya que no obtendrás una copia de seguridad real.

Dado que la transmisión de WAL es implementada por pg_basebackup y no por el servidor, esta opción no se puede usar junto con -Xstream. Como este es el valor predeterminado, cuando se especifica esta opción, también debes especificar -Xfetch o -Xnone.

-T olddir=newdir
--tablespace-mapping=olddir=newdir

Reubica el tablespace en el directorio olddir a newdir durante la copia de seguridad. Para ser efectivo, olddir debe coincidir exactamente con la especificación de la ruta del tablespace tal como está definido en el servidor de origen. (Pero no es un error si no hay ningún tablespace en olddir en el servidor de origen). Mientras tanto, newdir es un directorio en el sistema de archivos del host receptor. Al igual que con el directorio de destino principal, newdir no necesita existir previamente, pero si existe debe estar vacío. Tanto olddir como newdir deben ser rutas absolutas. Si alguna de las rutas necesita contener un signo de igual (=), antepón una barra invertida. Esta opción se puede especificar varias veces para múltiples tablespaces.

Si un tablespace se reubica de esta manera, los enlaces simbólicos dentro del directorio de datos principal se updatean para apuntar a la nueva ubicación. Así, el nuevo directorio de datos está listo para ser utilizado para una nueva instancia del servidor con todos los tablespaces en las ubicaciones actualizadas.

Actualmente, esta opción solo funciona con el formato de salida plano; se ignora si se selecciona el formato tar.

--waldir=waldir

Establece el directorio donde escribir los archivos WAL (write-ahead log). Por defecto, los archivos WAL se colocarán en el subdirectorio pg_wal del directorio de destino, pero esta opción se puede usar para colocarlos en otro lugar. waldir must be una ruta absoluta. Al igual que con el directorio de destino principal, waldir no necesita existir previamente, pero si existe debe estar vacío. Esta opción solo se puede especificar cuando la copia de seguridad está en formato plano.

-X method
--wal-method=method

Incluye los archivos WAL (write-ahead log) requeridos en la copia de seguridad. Esto incluirá todos los registros de transacciones generados durante la copia de seguridad. A menos que se especifique el método none, es posible iniciar un postmaster en el directorio de destino sin necesidad de consultar el archivo de WAL, lo que convierte el resultado en una copia de seguridad completamente independiente.

Se admiten los siguientes métodos para recopilar los registros de transacciones:

n
none

No incluye los registros de transacciones en la copia de seguridad.

f
fetch

Los archivos de registro de transacciones se recopilan al final de la copia de seguridad. Por lo tanto, es necesario que el parámetro wal_keep_size del servidor de origen esté configurado en un valor lo suficientemente alto como para que los datos de registro requeridos no se eliminen antes del final de la copia de seguridad. Si los datos de registro requeridos se han reciclado antes de que llegue el momento de transferirlos, la copia de seguridad fallará y quedará inutilizable.

Cuando se utiliza el formato tar, los archivos de registro de transacciones se incluirán en el archivo base.tar.

s
stream

Transmite en flujo los datos del registro de transacciones mientras se realiza la copia de seguridad. Este método abrirá una segunda conexión al servidor y comenzará a transmitir el registro de transacciones en paralelo mientras se ejecuta la copia de seguridad. Por lo tanto, requerirá dos conexiones de replicación en lugar de una. Siempre que el cliente pueda mantener el ritmo de los datos del registro de transacciones, el uso de este método no requiere que se guarden registros de transacciones adicionales en el servidor de origen.

Cuando se utiliza el formato tar, los archivos de registro de transacciones se escribirán en un archivo independiente llamado pg_wal.tar (si el servidor es de una versión anterior a la 10, el archivo se llamará pg_xlog.tar).

Este valor es el predeterminado.

-z
--gzip

Habilita la compresión gzip de la salida del archivo tar, con el nivel de compresión predeterminado. La compresión solo está disponible cuando se utiliza el formato tar, y el sufijo .gz se agregará automáticamente a todos los nombres de archivo tar.

-Z level
-Z [{client|server}-]method[:detail]
--compress=level
--compress=[{client|server}-]method[:detail]

Solicita la compresión de la copia de seguridad. Si se incluye client o server, especifica dónde se debe realizar la compresión. Comprimir en el servidor reducirá el ancho de banda de transferencia, pero aumentará el consumo de CPU del servidor. El valor predeterminado es client, excepto cuando se utiliza --target. En ese caso, la copia de seguridad no se envía al cliente, por lo que solo tiene sentido la compresión en el servidor. Cuando se utiliza -Xstream, que es el valor predeterminado, la compresión en el lado del servidor no se aplicará al WAL. Para comprimir el WAL, utiliza la compresión en el lado del cliente o especifica -Xfetch.

El método de compresión se puede establecer en gzip, lz4, zstd, none para que no haya compresión o un número entero (sin compresión si es 0, gzip si es mayor que 0). Opcionalmente, se puede especificar una cadena de detalle de compresión. Si la cadena de detalle es un número entero, especifica el nivel de compresión. De lo contrario, debe ser una lista de elementos separados por comas, cada uno con la forma palabra clave o palabra clave=valor. Actualmente, las palabras clave admitidas son level, long y workers. La cadena de detalle no se puede utilizar cuando el método de compresión se especifica como un entero simple.

Si no se especifica ningún nivel de compresión, se utilizará el nivel de compresión predeterminado. Si solo se especifica un nivel sin mencionar un algoritmo, se utilizará la compresión gzip si el nivel es mayor que 0, y no se utilizará ninguna compresión si el nivel es 0.

Cuando se utiliza el formato tar con gzip, lz4 o zstd, el sufijo .gz, .lz4 o .zst, respectivamente, se agregará automáticamente a todos los nombres de archivo tar. Cuando se utiliza el formato plano, no se puede especificar la compresión en el lado del cliente, pero aún es posible solicitar la compresión en el lado del servidor. Si se hace esto, el servidor comprimirá la copia de seguridad para la transmisión, y el cliente la descomprimirá y la extraerá.

Cuando esta opción se utiliza en combinación con -Xstream, pg_wal.tar se comprimirá utilizando gzip si se selecciona la compresión gzip en el lado del cliente, pero no se comprimirá si se selecciona cualquier otro algoritmo de compresión, o si se selecciona la compresión en el lado del servidor.

Las siguientes opciones de línea de comandos controlan la generación de la copia de seguridad y la invocación del programa:

-c {fast|spread}
--checkpoint={fast|spread}

Establece el modo de punto de control a rápido (inmediato) o distribuido (spread, el valor predeterminado) (ver Section 25.3.4).

-C
--create-slot

Especifica que el slot de replicación nombrado por la opción --slot debe crearse antes de comenzar la copia de seguridad. Se produce un error si el slot ya existe.

-l label
--label=label

Establece la etiqueta para la copia de seguridad. Si no se especifica ninguna, se utilizará un valor predeterminado de pg_basebackup base backup.

-n
--no-clean

Por defecto, cuando pg_basebackup aborta con un error, elimina cualquier directorio que pudiera haber creado antes de descubrir que no puede terminar el trabajo (por ejemplo, el directorio de destino y el directorio de registro de transacciones). Esta opción inhibe la limpieza y, por lo tanto, es útil para la depuración.

Ten en cuenta que los directorios de los tablespaces no se limpian en ningún caso.

-N
--no-sync

Por defecto, pg_basebackup esperará a que todos los archivos se escriban de forma segura en el disco. Esta opción hace que pg_basebackup 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 base. Generalmente, esta opción es útil para pruebas, pero no debe utilizarse al crear una instalación de producción.

-P
--progress

Habilita el informe de progreso. Activar esto ofrecerá un informe de progreso aproximado durante la copia de seguridad. Dado que la base de datos puede cambiar durante la copia de seguridad, esto es solo una aproximación y puede no terminar exactamente en el 100%. In particular, cuando se incluye el registro WAL en la copia de seguridad, la cantidad total de datos no se puede estimar de antemano, y en este caso el tamaño de destino estimado aumentará una vez que supere el estimado total sin WAL.

-r rate
--max-rate=rate

Establece la tasa máxima de transferencia a la que se recopilan los datos del servidor de origen. Esto puede ser útil para limitar el impacto de pg_basebackup en el servidor. Los valores están en kilobytes por segundo. Usa un sufijo de M para indicar megabytes por segundo. También se acepta un sufijo de k, y no tiene ningún efecto. Los valores válidos están entre 32 kilobytes por segundo y 1024 megabytes por segundo.

Esta opción siempre afecta a la transferencia del directorio de datos. La transferencia de archivos WAL solo se ve afectada si el método de recopilación es fetch.

-S slotname
--slot=slotname

Esta opción solo se puede utilizar junto con -X stream. Hace que la transmisión de WAL utilice el slot de replicación especificado. Si la copia de seguridad base está destinada a ser utilizada como un standby de replicación en flujo utilizando un slot de replicación, el standby debería utilizar el mismo nombre de slot de replicación que primary_slot_name. Esto asegura que el servidor primario no elimine ningún dato WAL necesario en el tiempo transcurrido entre el final de la copia de seguridad base y el inicio de la replicación en flujo en el nuevo standby.

El slot de replicación especificado debe existir a menos que también se utilice la opción -C.

Si no se especifica esta opción y el servidor admite slots de replicación temporales (versión 10 y posteriores), se utiliza automáticamente un slot de replicación temporal para la transmisión de WAL.

--sync-method=method

Cuando se establece en fsync, que es el valor predeterminado, pg_basebackup abrirá y sincronizará de forma recursiva todos los archivos en el directorio de la copia de seguridad. Cuando se utiliza el formato plano, la búsqueda de archivos seguirá los enlaces simbólicos para el directorio WAL y cada tablespace configurado.

En Linux, se puede usar syncfs en su lugar para solicitar al sistema operativo que sincronice todo el sistema de archivos que contiene el directorio de copia de seguridad. Cuando se utiliza el formato plano, pg_basebackup también sincronizará los sistemas de archivos que contienen los archivos WAL y cada tablespace. Consulta recovery_init_sync_method para obtener información sobre las advertencias que debes tener en cuenta al usar syncfs.

Esta opción no tiene efecto cuando se utiliza --no-sync.

-v
--verbose

Habilita el modo detallado (verbose). Mostrará algunos pasos adicionales durante el inicio y el apagado, así como el nombre exacto del archivo que se está procesando actualmente si el informe de progreso también está habilitado.

--manifest-checksums=algorithm

Especifica el algoritmo de suma de comprobación (checksum) que se debe aplicar a cada archivo incluido en el manifiesto de la copia de seguridad. Actualmente, los algoritmos disponibles son NONE, CRC32C, SHA224, SHA256, SHA384 y SHA512. El valor predeterminado es CRC32C.

Si se selecciona NONE, el manifiesto de la copia de seguridad no contendrá ninguna suma de comprobación. De lo contrario, contendrá una suma de comprobación de cada archivo en la copia de seguridad utilizando el algoritmo especificado. Además, el manifiesto siempre contendrá una suma de comprobación SHA256 de su propio contenido. Los algoritmos SHA son significativamente más intensivos en CPU que CRC32C, por lo que seleccionar uno de ellos puede aumentar el tiempo requerido para completar la copia de seguridad.

El uso de una función de hash SHA proporciona un resumen criptográficamente seguro de cada archivo para los usuarios que deseen verificar que la copia de seguridad no ha sido alterada, mientras que el algoritmo CRC-32C proporciona una suma de comprobación que es mucho más rápida de calcular; es buena para detectar errores debidos a cambios accidentales pero no es resistente a modificaciones maliciosas. Ten en cuenta que, para que sea útil contra un adversario que tenga acceso a la copia de seguridad, el manifiesto de la copia de seguridad tendría que almacenarse de forma segura en otro lugar o de lo contrario verificar que no haya sido modificado desde que se realizó la copia de seguridad.

Se puede utilizar pg_verifybackup para comprobar la integridad de una copia de seguridad comparándola con el manifiesto de la copia de seguridad.

--manifest-force-encode

Fuerza a que todos los nombres de archivo en el manifiesto de copia de seguridad estén codificados en hexadecimal. Si no se especifica esta opción, solo se codifican en hexadecimal los nombres de archivo que no sean UTF-8. Esta opción está pensada principalmente para probar que las herramientas que leen un archivo de manifiesto de copia de seguridad manejen correctamente este caso.

--no-estimate-size

Evita que el servidor estime la cantidad total de datos de copia de seguridad que se transmitirán en flujo, lo que provoca que la columna backup_total en la vista pg_stat_progress_basebackup sea siempre NULL.

Sin esta opción, la copia de seguridad comenzará enumerando el tamaño de toda la base de datos, y luego regresará y enviará los contenidos reales. Esto puede hacer que la copia de seguridad tarde un poco más y, en particular, tardará más tiempo antes de que se envíen los primeros datos. Esta opción es útil para evitar dicho tiempo de estimación si es demasiado largo.

Esta opción no está permitida cuando se utiliza --progress.

--no-manifest

Desactiva la generación de un manifiesto de copia de seguridad. Si no se especifica esta opción, el servidor generará y enviará un manifiesto de copia de seguridad que se puede verificar utilizando pg_verifybackup. El manifiesto es una lista de todos los archivos presentes en la copia de seguridad con la excepción de los archivos WAL que puedan estar incluidos. También almacena el tamaño, la hora de la última modificación y una suma de comprobación opcional para cada archivo.

--no-slot

Evita la creación de un slot de replicación temporal para la copia de seguridad.

Por defecto, si se selecciona la transmisión de registros pero no se proporciona ningún nombre de slot con la opción -S, se crea un slot de replicación temporal (si lo admite el servidor de origen).

El propósito principal de esta opción es permitir la realización de una copia de seguridad base cuando el servidor no tiene slots de replicación libres. Casi siempre es preferible utilizar un slot de replicación, porque evita que el servidor elimine los WAL necesarios durante la copia de seguridad.

--no-verify-checksums

Desactiva la verificación de las sumas de comprobación, si están habilitadas en el servidor del que se toma la copia de seguridad base.

Por defecto, se verifican las sumas de comprobación y los fallos en ellas darán como resultado un estado de salida distinto de cero. Sin embargo, la copia de seguridad base no se eliminará en tal caso, como si se hubiera utilizado la opción --no-clean. Los fallos de verificación de sumas de comprobación también se informarán en la vista pg_stat_database.

Las siguientes opciones de línea de comandos controlan la conexión con el servidor de origen:

-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.

Esta opción se llama --dbname por coherencia con otras aplicaciones cliente, pero debido a que pg_basebackup no se conecta a ninguna base de datos en particular en el clúster, cualquier nombre de base de datos incluido en la cadena de conexión será ignorado por el servidor. Sin embargo, un nombre de base de datos suministrado de esa manera anula el nombre de base de datos predeterminado (replication) a efectos de buscar la contraseña de la conexión de replicación en ~/.pgpass. Del mismo modo, el middleware o los proxies utilizados para conectarse a PostgreSQL podrían utilizar el nombre a efectos tales como el enrutamiento de conexiones. El nombre de la base de datos también puede ser utilizado por la sincronización de slots de replicación lógica.

-h host
--host=host

Especifica el nombre de host de la máquina en la que se ejecuta el servidor. Si el valor comienza con una barra diagonal, se utiliza como el directorio para un 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.

-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.

-s interval
--status-interval=interval

Especifica el número de segundos entre los paquetes de estado enviados de vuelta al servidor de origen. Los valores más pequeños permiten un control más preciso del progreso de la copia de seguridad desde el servidor. Un valor de cero desactiva por completo las actualizaciones de estado periódicas, aunque se seguirá enviando una actualización cuando lo solicite el servidor para evitar desconexiones por tiempo de espera (timeout). El valor predeterminado es 10 segundos.

-U username
--username=username

Especifica el nombre de usuario con el que conectarse.

-w
--no-password

Evita que se solicite 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_basebackup a solicitar una contraseña antes de conectarse al servidor de origen.

Esta opción nunca es indispensable, ya que pg_basebackup solicitará automáticamente una contraseña si el servidor requiere autenticación por contraseña. Sin embargo, pg_basebackup 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.

También están disponibles otras opciones:

-V
--version

Muestra la versión de pg_basebackup y termina.

-?
--help

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

Entorno

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

La variable de entorno PG_COLOR especifica si se debe usar color en los mensajes de diagnóstico. Los valores posibles son always, auto y never.

Notas

Al principio de la copia de seguridad, se debe realizar un punto de control (checkpoint) en el servidor de origen. Esto puede llevar algún tiempo (especialmente si no se utiliza la opción --checkpoint=fast), durante el cual pg_basebackup parecerá estar inactivo.

La copia de seguridad incluirá todos los archivos del directorio de datos y de los tablespaces, incluidos los archivos de configuración y cualquier archivo adicional colocado en el directorio por terceros, excepto ciertos archivos temporales gestionados por PostgreSQL y archivos del sistema operativo. Pero solo se copian los archivos y directorios ordinarios, a excepción de que se conservan los enlaces simbólicos utilizados para los tablespaces. Los enlaces simbólicos que apuntan a ciertos directorios conocidos por PostgreSQL se copian como directorios vacíos. Se omiten otros enlaces simbólicos y archivos de dispositivos especiales. Consulta Section 54.4 para obtener los detalles precisos.

En el formato plano, los tablespaces se respaldarán en la misma ruta que tienen en el servidor de origen, a menos que se utilice la opción --tablespace-mapping. Sin esta opción, ejecutar una copia de seguridad base en formato plano en el mismo host que el servidor no funcionará si hay tablespaces en uso, porque la copia de seguridad tendría que escribirse en las mismas ubicaciones de directorio que los tablespaces originales.

Cuando se utiliza el formato tar, es responsabilidad del usuario desempaquetar cada archivo tar antes de iniciar un servidor PostgreSQL que utilice los datos. Si hay tablespaces adicionales, los archivos tar correspondientes a ellos deben desempaquetarse en las ubicaciones correctas. En este caso, los enlaces simbólicos para esos tablespaces serán creados por el servidor de acuerdo con el contenido del archivo tablespace_map que se incluye en el archivo base.tar.

pg_basebackup funciona con servidores de la misma versión principal o anterior, hasta la 9.1. Sin embargo, el modo de transmisión de WAL (-X stream) solo funciona con la versión del servidor 9.3 y posteriores, el formato tar (--format=tar) solo funciona con la versión del servidor 9.5 y posteriores, y la copia de seguridad incremental (--incremental) solo funciona con la versión del servidor 17 y posteriores.

pg_basebackup conservará los permisos de grupo para los archivos de datos si los permisos de grupo están habilitados en el clúster de origen.

Ejemplos

Para crear una copia de seguridad base del servidor en mydbserver y almacenarla en el directorio local /usr/local/pgsql/data:

$ pg_basebackup -h mydbserver -D /usr/local/pgsql/data

Para crear una copia de seguridad del servidor local con un archivo tar comprimido para cada tablespace, y almacenarlo en el directorio backup, mostrando un informe de progreso durante la ejecución:

$ pg_basebackup -D backup -Ft -z -P

Para crear una copia de seguridad de una base de datos local con un único tablespace y comprimir esta con bzip2:

$ pg_basebackup -D - -Ft -X fetch | bzip2 > backup.tar.bz2

(Este comando fallará si hay múltiples tablespaces en la base de datos).

Para crear una copia de seguridad de una base de datos local donde el tablespace en /opt/ts se reubica a ./backup/ts:

$ pg_basebackup -D backup/data -T /opt/ts=$(pwd)/backup/ts

Para crear una copia de seguridad del servidor local con un archivo tar para cada tablespace comprimido con gzip en el nivel 9, almacenado en el directorio backup:

$ pg_basebackup -D backup -Ft --compress=gzip:9

Véase también

pg_dump, Section 27.4.6