pg_dump — exporta una base de datos PostgreSQL como un script SQL o a otros formatos
pg_dump [connection-option...] [option...] [dbname]
pg_dump es una utilidad para exportar una base de datos PostgreSQL. Realiza exportaciones consistentes incluso si la base de datos se está utilizando de forma concurrente. pg_dump no bloquea a otros usuarios que acceden a la base de datos (lectores o escritores). Ten en cuenta, sin embargo, que excepto en casos sencillos, pg_dump generalmente no es la opción adecuada para realizar copias de seguridad periódicas de bases de datos de producción. Consulta Chapter 25 para una mayor discusión.
pg_dump solo exporta una única base de datos. Para exportar un clúster completo, o para exportar objetos globales que son comunes a todas las bases de datos de un clúster (como roles y tablespaces), utiliza pg_dumpall.
Las copias de seguridad se pueden generar en formatos de script o de archivo de respaldo. Los dumps de script son archivos de texto plano que contienen los comandos SQL necesarios para reconstruir la base de datos al estado en que se encontraba en el momento en que se guardó. Para restaurar a partir de dicho script, envíalo a psql. Los archivos de script se pueden utilizar para reconstruir la base de datos incluso en otras máquinas y otras arquitecturas; con algunas modificaciones, incluso en otros productos de bases de datos SQL.
Los formatos alternativos de archivo de respaldo se deben utilizar con pg_restore para reconstruir la base de datos. Permiten a pg_restore ser selectivo sobre qué se restaura, o incluso reordenar los elementos antes de ser restaurados. Los formatos de archivo de respaldo están diseñados para ser portables entre arquitecturas.
Cuando se utiliza con uno de los formatos de archivo de respaldo y se combina con
pg_restore,
pg_dump proporciona un mecanismo flexible de archivo y
transferencia. pg_dump se puede utilizar para
exportar una base de datos completa, luego pg_restore
se puede utilizar para examinar el archivo de respaldo y/o seleccionar qué partes de la
base de datos se van a restaurar. Los formatos de archivo de salida más flexibles son
el formato “custom” (personalizado, -Fc) y el
formato “directory” (directorio, -Fd). Permiten
la selección y reordenación de todos los elementos archivados, admiten la restauración
en paralelo y están comprimidos por defecto. El formato “directory”
es el único formato que admite copias de seguridad en paralelo.
Mientras se ejecuta pg_dump, se debe examinar la salida en busca de advertencias (impresas en la salida de error estándar), especialmente a la luz de las limitaciones enumeradas a continuació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. Las copias de seguridad que no son de texto plano se pueden inspeccionar
utilizando la opción --file de pg_restore.
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.
dbname
Especifica el nombre de la base de datos que se va a exportar. Si esto
no se especifica, se utiliza la variable de entorno
PGDATABASE. Si esta no está configurada, se utiliza el
nombre de usuario especificado para la conexión.
-a--data-onlyExporta solo los datos, no el esquema (definiciones de datos) ni las estadísticas. Se exportan los datos de las tablas, los objetos grandes (large objects) y los valores de las secuencias.
Esta opción es similar a, pero por razones históricas no idéntica
a, especificar --section=data.
-b--large-objects--blobs (obsoleto)
Incluye objetos grandes en la copia de seguridad. Este es el comportamiento predeterminado
excepto cuando se especifica --schema, --table,
--schema-only, --statistics-only o
--no-data. Por lo tanto, la opción -b
solo es útil para agregar objetos grandes a las copias de seguridad donde se ha solicitado un
esquema o tabla específicos. Ten en cuenta que los objetos grandes
se consideran datos y, por lo tanto, se incluirán cuando
se utiliza --data-only, pero no cuando se utiliza
--schema-only o --statistics-only.
-B--no-large-objects--no-blobs (obsoleto)Excluye los objetos grandes en la copia de seguridad.
Cuando se proporcionan tanto -b como -B, el comportamiento
es generar objetos grandes cuando se están exportando datos, consulta la
documentación de -b.
-c--clean
Genera comandos para eliminar (DROP) todos los objetos de base de datos
exportados antes de generar los comandos para crearlos.
Esta opción es útil cuando la restauración va a sobrescribir una base de datos
existente. Si alguno de los objetos no existe en la base de datos de destino, se
informará de mensajes de error ignorables durante la restauración, a menos que también se especifique
--if-exists.
Esta opción se ignora cuando se genera un archivo de salida de archivo de respaldo (no de texto).
Para los formatos de archivo de respaldo, puedes especificar la opción cuando
llames a pg_restore.
-C--create
Comienza la salida con un comando para crear la propia base de datos
y volverse a conectar a la base de datos creada. (Con un script de esta forma,
no importa a qué base de datos de la instalación de destino te conectes antes de ejecutar el script).
Si también se especifica --clean, el script elimina y
vuelve a crear la base de datos de destino antes de volver a conectarse a ella.
Con --create, la salida también incluye el comentario de la
base de datos si lo hubiera, y cualquier parámetro de variable de configuración que
sea específico de esta base de datos, es decir, cualquier comando
ALTER DATABASE ... SET ... y
ALTER ROLE ... IN DATABASE ... SET ... que mencione esta base de datos.
Los privilegios de acceso para la propia base de datos también se exportan,
a menos que se especifique --no-acl.
Esta opción se ignora cuando se genera un archivo de salida de archivo de respaldo (no de texto).
Para los formatos de archivo de respaldo, puedes especificar la opción cuando
llames a pg_restore.
-e pattern--extension=pattern
Exporta solo las extensiones que coincidan con el patrón. Cuando esta opción no está
especificada, se exportarán todas las extensiones que no sean del sistema en la base de datos de destino.
Se pueden seleccionar múltiples extensiones escribiendo múltiples opciones
-e. 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 seleccionar múltiples extensiones escribiendo caracteres comodín en el patrón.
Al usar comodines, ten cuidado de entrecomillar el patrón si es necesario para evitar
que el shell expanda los comodines.
Cualquier relación de configuración registrada por
pg_extension_config_dump se incluye en la copia de seguridad
si su extensión es especificada por --extension.
Cuando se especifica -e,
pg_dump no intenta exportar ningún otro objeto de
base de datos del que puedan depender las extensiones seleccionadas.
Por lo tanto, no hay garantía de que los resultados de una copia de seguridad de una
extensión específica se puedan restaurar con éxito por sí mismos en una base de datos limpia.
-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). Las codificaciones admitidas se
describen en Section 23.3.1.
-f file--file=file
Envía la salida al archivo especificado. Este parámetro se puede omitir para los
formatos de salida basados en archivos, en cuyo caso se utiliza la salida estándar.
Sin embargo, debe proporcionarse para el formato de salida de directorio, donde
especifica el directorio de destino en lugar de un archivo. En este caso, el
directorio es creado por pg_dump y no debe existir
previamente.
-F format--format=format
Selecciona el formato de la salida.
format puede ser uno de los siguientes:
pplainGenera un archivo de script SQL de texto plano (el predeterminado).
ccustomGenera un archivo de respaldo en formato personalizado adecuado para su entrada en pg_restore. Junto con el formato de salida de directorio, este es el formato de salida más flexible ya que permite la selección manual y reordenación de los elementos archivados durante la restauración. Este formato también está comprimido por defecto.
ddirectory
Genera un archivo de respaldo en formato de directorio adecuado para su entrada en
pg_restore. Esto creará un directorio con un
archivo para cada tabla y objeto grande que se esté exportando, más un archivo
denominado Table of Contents (Tabla de contenidos) que describe los objetos exportados en un
formato legible por máquina que pg_restore puede
leer. Un archivo de respaldo en formato de directorio se puede manipular con herramientas Unix
estándar; por ejemplo, los archivos en un archivo no comprimido se pueden comprimir con
las herramientas gzip, lz4 o
zstd.
Este formato se comprime por defecto utilizando gzip y también
admite copias de seguridad en paralelo.
ttar
Genera un archivo de respaldo en formato tar adecuado para su entrada
en pg_restore. El formato tar es compatible con el
formato de directorio: la extracción de un archivo en formato tar produce un archivo
válido en formato de directorio. Sin embargo, el formato tar no admite compresión.
Además, al usar el formato tar, el orden relativo de los elementos de datos de la tabla
no se puede cambiar durante la restauración.
-j njobs--jobs=njobs
Ejecuta la copia de seguridad en paralelo exportando njobs
tablas simultáneamente. Esta opción puede reducir el tiempo necesario para realizar la copia de seguridad,
pero también aumenta la carga en el servidor de bases de datos. Solo puedes utilizar esta opción con
el formato de salida de directorio porque este es el único formato de salida donde múltiples procesos
pueden escribir sus datos al mismo tiempo.
pg_dump abrirá njobs
+ 1 conexiones a la base de datos, así que asegúrate de que tu parámetro max_connections
esté configurado con un valor lo suficientemente alto como para acomodar todas las conexiones.
Solicitar bloqueos exclusivos sobre objetos de base de datos mientras se ejecuta una copia de seguridad
en paralelo podría hacer que la copia de seguridad falle. La razón es que el proceso líder de
pg_dump solicita bloqueos compartidos (ACCESS SHARE)
sobre los objetos que los procesos trabajadores van a exportar más tarde para asegurarse de
que nadie los elimine ni los haga desaparecer mientras se ejecuta la copia de seguridad. Si
otro cliente solicita entonces un bloqueo exclusivo sobre una tabla, ese bloqueo no se otorgará, sino
que se encolará esperando a que se libere el bloqueo compartido del proceso líder. Como consecuencia,
cualquier otro acceso a la tabla tampoco se otorgará y se encolará detrás de la solicitud de bloqueo
exclusivo. Esto incluye al proceso trabajador que intenta exportar la tabla. Sin ninguna precaución,
esto sería una situación clásica de interbloqueo (deadlock). Para detectar este conflicto, el proceso
trabajador de pg_dump solicita otro bloqueo compartido utilizando la opción
NOWAIT. Si al proceso trabajador no se le otorga este bloqueo compartido, significa que
alguien más debe haber solicitado un bloqueo exclusivo en el ínterin y no hay forma de continuar con
la copia de seguridad, por lo que a pg_dump no le queda más remedio que
abortar la copia de seguridad.
Para realizar una copia de seguridad en paralelo, el servidor de bases de datos necesita admitir
instantáneas sincronizadas, una característica que se introdujo en
PostgreSQL 9.2 para servidores primarios y 10
para servidores en espera (standby). Con esta característica, los clientes de base de datos pueden
asegurarse de ver el mismo conjunto de datos aunque utilicen conexiones diferentes.
pg_dump -j utiliza múltiples conexiones de base de datos; se conecta a
la base de datos una vez con el proceso líder y una vez más por cada trabajo trabajador (worker). Sin
la característica de instantánea sincronizada, no se garantizaría que los diferentes trabajos trabajadores
vieran los mismos datos en cada conexión, lo que podría conducir a una copia de seguridad inconsistente.
-n pattern--schema=pattern
Exporta solo los esquemas que coincidan con el patrón; esto selecciona tanto el propio esquema como todos
los objetos contenidos en él. Cuando no se especifica esta opción, se exportarán todos los
esquemas que no sean del sistema en la base de datos de destino. Se pueden seleccionar
múltiples esquemas escribiendo múltiples opciones -n. 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 seleccionar múltiples esquemas escribiendo caracteres comodín en el patrón. Al usar
comodines, ten cuidado de entrecomillar el patrón si es necesario para evitar que el shell expanda
los comodines; consulta la sección Examples a continuación.
Cuando se especifica -n, pg_dump
no intenta exportar ningún otro objeto de base de datos del que puedan depender los
esquemas seleccionados. Por lo tanto, no hay garantía de que los resultados de una copia de
seguridad de un esquema específico se puedan restaurar con éxito por sí mismos en una base de
datos limpia.
Los objetos que no pertenecen a un esquema, como los objetos grandes, no se exportan cuando se especifica
-n. Puedes agregar objetos grandes de nuevo a la copia de seguridad con la opción
--large-objects.
-N pattern--exclude-schema=pattern
No exporta ningún esquema que coincida con el patrón. El patrón se interpreta de acuerdo con las
mismas reglas que para -n. Se puede proporcionar -N más de
una vez para excluir esquemas que coincidan con cualquiera de varios patrones.
Cuando se proporcionan tanto -n como -N, el comportamiento
es exportar solo los esquemas que coincidan al menos con una opción -n pero con
ninguna opción -N. Si aparece -N sin -n,
entonces los esquemas que coincidan con -N se excluyen de lo que de otro modo sería
una copia de seguridad normal.
-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_dump emite sentencias
ALTER OWNER o SET SESSION AUTHORIZATION
para establecer la propiedad de los objetos de base de datos 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.
Esta opción se ignora cuando se genera un archivo de salida de archivo de respaldo (no de texto).
Para los formatos de archivo de respaldo, puedes especificar la opción cuando
llames a pg_restore.
-R--no-reconnectEsta opción está obsoleta pero aún se acepta por compatibilidad con versiones anteriores.
-s--schema-onlyExporta solo las definiciones de objetos (esquema), no los datos ni las estadísticas.
Esta opción no se puede usar con --data-only o
--statistics-only. Es similar a, pero por razones históricas no
idéntica a, especificar --section=pre-data --section=post-data.
(No confundas esto con la opción --schema, que utiliza la palabra
“esquema” con un significado diferente).
Para excluir los datos de las tablas solo para un subconjunto de tablas en la base de datos, consulta
--exclude-table-data.
-S username--superuser=username
Especifica el nombre de usuario del superusuario que se utilizará al deshabilitar los disparadores (triggers).
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 pattern--table=pattern
Exporta solo las tablas con nombres que coincidan con el patrón. Se pueden seleccionar múltiples tablas escribiendo
múltiples opciones -t. 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 seleccionar múltiples tablas escribiendo caracteres comodín en el patrón. Al usar
comodines, ten cuidado de entrecomillar el patrón si es necesario para evitar que el shell expanda
los comodines; consulta la sección Examples a continuación.
Además de las tablas, esta opción se puede utilizar para exportar la definición de vistas, vistas
materializadas, tablas foráneas y secuencias que coincidan. No exportará el contenido de las
vistas o vistas materializadas, y el contenido de las tablas foráneas solo se exportará si el
servidor foráneo correspondiente se especifica con --include-foreign-data.
Las opciones -n y -N no tienen efecto cuando se utiliza
-t, porque las tablas seleccionadas por -t se exportarán
independientemente de esas opciones, y los objetos que no sean tablas no se exportarán.
When se especifica -t, pg_dump
no intenta exportar ningún otro objeto de base de datos del que las tablas seleccionadas
puedan depender. Por lo tanto, no hay garantía de que los resultados de una copia de
seguridad de una tabla específica se puedan restaurar con éxito por sí mismos en una base de
datos limpia.
-T pattern--exclude-table=pattern
No exporta ninguna tabla que coincida con el patrón. El patrón se interpreta de acuerdo con las
mismas reglas que para -t. Se puede proporcionar -T más
de una vez para excluir tablas que coincidan con cualquiera de varios patrones.
Cuando se proporcionan tanto -t como -T, el comportamiento
es exportar solo las tablas que coincidan al menos con una opción -t pero con
ninguna opción -T. Si aparece -T sin -t,
entonces las tablas que coincidan con -T se excluyen de lo que de otro modo sería
una copia de seguridad normal.
-v--verboseEspecifica el modo detallado (verbose). Esto hará que pg_dump escriba comentarios detallados sobre los objetos y 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.
-V--versionMuestra la versión de pg_dump y termina.
-x--no-privileges--no-aclEvita la exportación de privilegios de acceso (comandos grant/revoke).
-Z level-Z method[:detail]--compress=level--compress=method[:detail]
Especifica el método de compresión y/o el nivel de compresión que se utilizará.
El método de compresión se puede establecer en gzip,
lz4, zstd o none para
que no haya compresión. 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
keyword o keyword=value. Actualmente, las palabras clave
admitidas son level y long.
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.
Para los formatos de archivo de respaldo personalizado y de directorio, esto especifica la compresión de
los segmentos de datos de tablas individuales, y el valor predeterminado es comprimir utilizando
gzip a un nivel moderado. Para la salida de texto plano, establecer un nivel de
compresión distinto de cero hace que todo el archivo de salida se comprima, como si se hubiera
enviado a través de gzip, lz4 o
zstd; pero el valor predeterminado es no comprimir. Con la compresión
zstd, el modo long puede mejorar la relación de compresión, a costa de un mayor
uso de memoria.
El formato de archivo tar actualmente no admite compresión en absoluto.
--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. Cualquier error durante la restauración hará que se
pierdan solo las filas que forman parte del comando tabla (columna, ...)
VALUES ...INSERT problemático, en
lugar de todo el contenido de la tabla.
--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 que incluye datos pero no incluye el esquema. Instruye a pg_dump para que incluya comandos para deshabilitar temporalmente los disparadores (triggers) 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.
Esta opción se ignora cuando se genera un archivo de salida de archivo de respaldo (not-text).
Para los formatos de archivo de respaldo, puedes especificar la opción cuando
llames a pg_restore.
--enable-row-securityEsta opción es relevante solo cuando se exporta el contenido de una tabla que tiene seguridad a nivel de fila. Por defecto, pg_dump establecerá row_security a off, para asegurarse de que se exporten todos los datos de la tabla. Si el usuario no tiene privilegios suficientes para eludir la seguridad a nivel de fila, se lanza un error. Este parámetro instruye a pg_dump para que establezca row_security a on en su lugar, lo que permite al usuario exportar las partes del contenido de la tabla a las que tiene acceso.
Ten en cuenta que si utilizas esta opción actualmente, probablemente también quieras que la copia de seguridad
esté en formato INSERT, ya que el comando COPY FROM
durante la restauración no admite la seguridad a nivel de fila.
--exclude-extension=pattern
No exporta ninguna extensión que coincida con el patrón. El patrón se interpreta de acuerdo con las
mismas reglas que para -e. Se puede proporcionar
--exclude-extension más de una vez para excluir extensiones que coincidan con cualquiera
de varios patrones.
Cuando se proporcionan tanto -e como --exclude-extension, el
comportamiento es exportar solo las extensiones que coincidan al menos con una opción -e
pero con ninguna opción --exclude-extension. Si aparece
--exclude-extension sin -e, entonces las extensiones que
coincidan con --exclude-extension se excluyen de lo que de otro modo sería una copia de
seguridad normal.
--exclude-table-and-children=pattern
Esto es lo mismo que la opción -T/--exclude-table, excepto que
también excluye cualquier partición o tabla hija de herencia de las tablas que coincidan con el
patrón.
--exclude-table-data=pattern
No exporta datos para ninguna tabla que coincida con el patrón. El patrón se interpreta de acuerdo con las
mismas reglas que para -t. Se puede proporcionar
--exclude-table-data más de una vez para excluir tablas que coincidan con cualquiera
de varios patrones. Esta opción es útil cuando necesitas la definición de una tabla en particular
aunque no necesites los datos que contiene.
Para excluir datos de todas las tablas de la base de datos, consulta --schema-only
o --statistics-only.
--exclude-table-data-and-children=pattern
Esto es lo mismo que la opción --exclude-table-data, excepto que también excluye
los datos de cualquier partición o tabla hija de herencia de las tablas que coincidan con el
patrón.
--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 objetos para incluir o excluir de la
copia de seguridad. Los patrones se interpretan de acuerdo con las mismas reglas que las opciones correspondientes:
-t/--table, --table-and-children,
-T/--exclude-table y --exclude-table-and-children
para tablas, -n/--schema y -N/--exclude-schema
para esquemas, --include-foreign-data para datos en servidores foráneos,
--exclude-table-data y --exclude-table-data-and-children para datos
de tablas, y -e/--extension y --exclude-extension
para extensiones. Para leer de la entrada estándar (STDIN), utiliza -
como nombre de archivo. La opción --filter se puede especificar en conjunto con las
opciones enumeradas anteriormente para incluir o excluir objetos, y también se puede especificar más
de una vez para múltiples archivos de filtro.
El archivo enumera un patrón de objeto por fila, con el siguiente formato:
{ include | exclude } { extension | foreign_data | table | table_and_children | table_data | table_data_and_children | schema } PATTERN
La primera palabra clave especifica si los objetos que coinciden con el patrón se van a incluir o excluir. La segunda palabra clave especifica el tipo de objeto a filtrar utilizando el patrón:
extension: extensiones. Esto funciona como la opción
-e/--extension o la opción --exclude-extension.
foreign_data: datos en servidores foráneos. Esto funciona como la opción
--include-foreign-data. Esta palabra clave solo se puede utilizar con la
palabra clave include.
table: tablas. Esto funciona como la opción
-t/--table o la opción -T/--exclude-table.
table_and_children: tablas que incluyen particiones o tablas hijas de
herencia. Esto funciona como la opción --table-and-children o la opción
--exclude-table-and-children.
table_data: datos de tabla de cualquier tabla que coincida con el
patrón. Esto funciona como la opción
--exclude-table-data. Esta palabra clave solo se puede utilizar con la
palabra clave exclude.
table_data_and_children: datos de tabla de cualquier tabla que coincida con el
patrón, así como cualquier partición o hija de herencia de las
tablas. Esto funciona como la opción --exclude-table-data-and-children. Esta
palabra clave solo se puede utilizar con la palabra clave exclude.
schema: esquemas. Esto funciona como la opción
-n/--schema o la opción -N/--exclude-schema.
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.
Los archivos de ejemplo se enumeran a continuación en la sección Examples.
--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.
--include-foreign-data=foreignserver
Exporta los datos de cualquier tabla foránea con un servidor foráneo que coincida con el patrón
foreignserver. Se pueden seleccionar múltiples
servidores foráneos escribiendo múltiples opciones --include-foreign-data.
Además, el parámetro foreignserver 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 seleccionar múltiples servidores foráneos escribiendo caracteres comodín en el patrón. Al usar
comodines, ten cuidado de entrecomillar el patrón si es necesario para evitar que el shell expanda
los comodines; consulta la sección Examples a continuación. La única
excepción es que no se permite un patrón vacío.
El uso de comodines en --include-foreign-data puede resultar en el acceso a
servidores foráneos inesperados. Además, para utilizar esta opción de forma segura, asegúrate de que
el servidor nombrado tenga un propietario de confianza.
Cuando se especifica --include-foreign-data,
pg_dump no comprueba que la tabla foránea sea escribible.
Por lo tanto, no hay garantía de que los resultados de una copia de seguridad de una tabla
foránea se puedan restaurar con éxito.
--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. 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. 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 segura frente a los cambios en el orden de las columnas, aunque
es 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,
if 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. (Los formatos
permitidos varían según la versión del servidor de la que estés exportando, pero todas las versiones
aceptan un número entero de milisegundos).
--no-comments
No exporta comandos COMMENT.
--no-dataNo exporta los datos.
--no-policiesNo exporta políticas de seguridad a nivel de fila (row security policies).
--no-publicationsNo exporta publicaciones.
--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_dump esperará a que todos los archivos se escriban de forma segura
en el disco. Esta opción hace que pg_dump 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.
Esta opción se ignora cuando se genera un archivo de salida de archivo de respaldo (no de texto).
Para los formatos de archivo de respaldo, puedes especificar la opción cuando
llames a pg_restore.
--no-tablespacesNo genera comandos para seleccionar tablespaces. Con esta opción, todos los objetos se crearán en el tablespace que sea el predeterminado durante la restauración.
Esta opción se ignora cuando se genera un archivo de salida de archivo de respaldo (no de texto).
Para los formatos de archivo de respaldo, puedes especificar la opción cuando
llames a pg_restore.
--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 y secuencias no registradas (unlogged). Esta opción no tiene efecto sobre si se exportan o no las definiciones de las tablas y secuencias (esquema); solo suprime la exportación de los datos de las tablas y secuencias. Los datos de las tablas y secuencias no registradas siempre se excluyen cuando se realiza la copia de seguridad desde un servidor en espera (standby).
--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,
--column-inserts o --rows-per-insert.
--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_dump, o cuando la salida está destinada a cargarse en un
servidor de una versión principal diferente. Por defecto, pg_dump 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. Esto solo se puede especificar para copias de seguridad de texto plano,
es decir, cuando --format está establecido en plain o se omite
la opción --format. Si no se especifica ninguna clave de restricción,
pg_dump 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.
--section=sectionname
Solo exporta la sección nombrada. El nombre de la sección puede ser pre-data,
data o post-data. Esta opción se puede especificar más de una
vez para seleccionar múltiples secciones. El valor predeterminado es exportar todas las secciones.
La sección de datos (data) contiene los datos reales de las tablas, el contenido de los objetos grandes, los valores de las secuencias y las estadísticas para las tablas, vistas materializadas y tablas foráneas. Los elementos post-datos (post-data) incluyen definiciones de índices, disparadores, reglas, estadísticas para índices y restricciones distintas de las restricciones check validadas y not-null. Los elementos pre-datos (pre-data) incluyen todos los demás elementos de definición de datos.
--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.
--serializable-deferrable
Utiliza una transacción serializable para la copia de seguridad, para garantizar que
la instantánea utilizada sea consistente con los estados posteriores de la base de datos; pero hace esto
esperando un punto en el flujo de transacciones en el que no puedan presentarse anomalías, de modo que
no exista el riesgo de que la copia de seguridad falle o haga que otras transacciones se reviertan con una
serialization_failure. Consulta Chapter 13 para obtener más información
sobre el aislamiento de transacciones y el control de concurrencia.
Esta opción no es beneficiosa para una copia de seguridad destinada únicamente a la recuperación ante desastres. Podría ser útil para una copia de seguridad utilizada para cargar una copia de la base de datos para informes u otro uso compartido de carga de solo lectura mientras la base de datos original continúa actualizándose. Sin ella, la copia de seguridad puede reflejar un estado que no es consistente con ninguna ejecución serial de las transacciones finalmente confirmadas. Por ejemplo, si se utilizan técnicas de procesamiento por lotes, un lote puede mostrarse como cerrado en la copia de seguridad sin que aparezcan todos los elementos que están en el lote.
Esta opción no marcará ninguna diferencia si no hay transacciones de lectura-escritura activas cuando se inicia pg_dump. Si hay transacciones de lectura-escritura activas, el inicio de la copia de seguridad puede retrasarse durante un período de tiempo indeterminado. Una vez en ejecución, el rendimiento con o sin la opción es el mismo.
--snapshot=snapshotnameUtiliza la instantánea sincronizada especificada al realizar una copia de seguridad de la base de datos (consulta Table 9.100 para obtener más detalles).
Esta opción es útil cuando se necesita sincronizar la copia de seguridad con un slot de replicación lógica (ver Chapter 47) o con una sesión concurrente.
En el caso de una copia de seguridad en paralelo, se utiliza el nombre de la instantánea definido por esta opción en lugar de tomar una nueva instantánea.
--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.
--strict-names
Requiere que cada patrón de extensión (-e/--extension),
esquema (-n/--schema) y tabla (-t/--table)
coincida al menos con una extensión/esquema/tabla en la base de datos a exportar. Esto también se aplica a los
filtros utilizados con --filter. Ten en cuenta que si ninguno de los patrones de
extensión/esquema/tabla encuentra coincidencias, pg_dump generará un error
incluso sin --strict-names.
Esta opción no tiene efecto en --exclude-extension,
-N/--exclude-schema, -T/--exclude-table
o --exclude-table-data. Que un patrón de exclusión no coincida con ningún objeto no se
considera un error.
--sync-method=method
Cuando se establece en fsync, que es el valor predeterminado,
pg_dump --format=directory abrirá y sincronizará de forma recursiva
todos los archivos en el directorio del archivo de respaldo.
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 del archivo de respaldo. 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 o
cuando --format no está establecido en directory.
--table-and-children=pattern
Esto es lo mismo que la opción -t/--table, excepto que también
incluye cualquier partición o tabla hija de herencia de las tablas que coincidan con el
patrón.
--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. Además, una copia de seguridad que utilice SET SESSION AUTHORIZATION
ciertamente requerirá privilegios de superusuario para restaurarse correctamente, mientras que
ALTER OWNER requiere privilegios menores.
-?--helpMuestra ayuda sobre los argumentos de línea de comandos de pg_dump y termina.
Las siguientes opciones de línea de comandos controlan los parámetros de conexión a la base de datos.
-d dbname--dbname=dbname
Especifica el nombre de la base de datos a la que conectarse. Esto es equivalente a especificar
dbname como el primer argumento que no es una opción en la línea
de comandos. El dbname puede ser una
cadena de conexión. Si es así, los parámetros de la cadena de
conexión anularán cualquier opción de línea de comandos en conflicto.
-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 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.
-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_dump a solicitar una contraseña antes de conectarse a una base de datos.
Esta opción nunca es indispensable, ya que pg_dump solicitará
automáticamente una contraseña si el servidor requiere autenticación por contraseña. Sin embargo,
pg_dump 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.
--role=rolename
Especifica un nombre de rol que se utilizará para crear la copia de seguridad. Esta opción hace que
pg_dump 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_dump, 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.
PGDATABASEPGHOSTPGOPTIONSPGPORTPGUSERPará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).
pg_dump ejecuta internamente sentencias SELECT. Si tienes
problemas al ejecutar pg_dump, asegúrate de que puedes seleccionar información
de la base de datos utilizando, por ejemplo, psql. Además, se aplicará cualquier
configuración de conexión predeterminada y variables de entorno utilizadas por la biblioteca cliente
libpq.
La actividad de base de datos de pg_dump normalmente es recopilada por el sistema
de estadísticas acumulativas. Si esto no es deseable, puedes establecer el parámetro track_counts
a false a través de PGOPTIONS o del comando ALTER USER.
Si tu clúster de bases de datos tiene adiciones locales a la base de datos template1,
ten cuidado de restaurar la salida de pg_dump en una base de datos verdaderamente
vacía; de lo contrario, es probable que obtengas errores debido a definiciones duplicadas de los objetos agregados.
Para hacer una base de datos vacía sin adiciones locales, realiza la copia desde template0,
no desde template1, por ejemplo:
CREATE DATABASE foo WITH TEMPLATE template0;
Cuando se elige una copia de seguridad sin esquema y se utiliza la opción --disable-triggers,
pg_dump emite comandos para deshabilitar los disparadores en las tablas de usuario
antes de insertar los datos, y luego comandos para volver a habilitarlos después de que se hayan insertado los datos.
Si la restauración se detiene en el medio, los catálogos del sistema podrían quedar en un estado incorrecto.
Cuando se especifica --statistics, pg_dump 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 después de restaurar desde un archivo de copia de
seguridad para garantizar un rendimiento óptimo; consulta Section 24.1.3 y Section 24.1.6 para obtener más información.
Debido a que pg_dump se utiliza para transfererir datos a versiones más nuevas de
PostgreSQL, se puede esperar que la salida de pg_dump
se cargue en versiones de servidor de PostgreSQL más nuevas que la versión de
pg_dump. pg_dump también puede exportar desde servidores de
PostgreSQL más antiguos que su propia versión. (Actualmente, se admiten servidores hasta
la versión 9.2). Sin embargo, pg_dump no puede exportar desde servidores de
PostgreSQL más nuevos que su propia versión principal; se negará incluso a intentarlo,
en lugar de arriesgarse a realizar una copia de seguridad no válida. Además, no se garantiza que la salida de
pg_dump se pueda cargar en un servidor de una versión principal anterior — ni
siquiera si la copia de seguridad se tomó desde un servidor de esa versión. Cargar una copia de seguridad en un
servidor más antiguo puede requerir la edición manual del archivo de copia de seguridad para eliminar la sintaxis
que el servidor más antiguo no entiende. Se recomienda el uso de la opción --quote-all-identifiers
en casos de versiones cruzadas, ya que puede evitar problemas derivados de listas de palabras reservadas variables
en diferentes versiones de PostgreSQL.
Al exportar suscripciones de replicación lógica, pg_dump generará comandos
CREATE SUBSCRIPTION que utilizan la opción connect = false, de modo que
la restauración de la suscripción no realice conexiones remotas para crear un slot de replicación o para la copia
inicial de tablas. De esa manera, la copia de seguridad se puede restaurar sin requerir acceso de red a los servidores
remotos. Corresponde entonces al usuario reactivar las suscripciones de manera adecuada. Si los hosts involucrados
han cambiado, es posible que deba cambiarse la información de conexión. También podría ser apropiado vaciar
(truncate) las tablas de destino antes de iniciar una nueva copia completa de las tablas. Si los usuarios tienen la
intención de copiar los datos iniciales durante la actualización, deben crear el slot con two_phase = false.
Después de la sincronización inicial, la opción two_phase
será habilitada automáticamente por el suscriptor si la suscripción se había creado originalmente con la opción
two_phase = true.
Generalmente se recomienda utilizar la opción -X (--no-psqlrc) al restaurar una
base de datos desde un script de pg_dump de texto plano para garantizar un proceso de
restauración limpio y evitar posibles conflictos con configuraciones no predeterminadas de psql.
Para exportar una base de datos llamada mydb a un archivo de script SQL:
$pg_dump mydb > db.sql
Para cargar dicho script en una base de datos (recién creada) llamada newdb:
$psql -X -d newdb -f db.sql
Para exportar una base de datos a un archivo de respaldo en formato personalizado:
$pg_dump -Fc mydb > db.dump
Para exportar una base de datos a un archivo de respaldo en formato de directorio:
$pg_dump -Fd mydb -f dumpdir
Para exportar una base de datos a un archivo de respaldo en formato de directorio en paralelo con 5 trabajos trabajadores (workers):
$pg_dump -Fd mydb -j 5 -f dumpdir
Para cargar un archivo de respaldo en una base de datos (recién creada) llamada newdb:
$pg_restore -d newdb db.dump
Para cargar un archivo de respaldo en la misma base de datos de la que se exportó, descartando el contenido actual de esa base de datos:
$pg_restore -d postgres --clean --create db.dump
Para exportar una sola tabla llamada mytab:
$pg_dump -t mytab mydb > db.sql
Para exportar todas las tablas cuyos nombres comiencen con emp en el esquema
detroit, excepto la tabla llamada employee_log:
$pg_dump -t 'detroit.emp*' -T detroit.employee_log mydb > db.sql
Para exportar todos los esquemas cuyos nombres comiencen con east o west
y terminen en gsm, excluyendo cualquier esquema cuyos nombres contengan la palabra
test:
$pg_dump -n 'east*gsm' -n 'west*gsm' -N '*test*' mydb > db.sql
Lo mismo, utilizando la notación de expresiones regulares para consolidar las opciones:
$pg_dump -n '(east|west)*gsm' -N '*test*' mydb > db.sql
Para exportar todos los objetos de la base de datos excepto las tablas cuyos nombres comiencen con
ts_:
$pg_dump -T 'ts_*' mydb > db.sql
Para especificar un nombre en mayúsculas o minúsculas mixtas en -t y opciones relacionadas,
debes entrecomillar doblemente el nombre; de lo contrario, se convertirá a minúsculas (consulta
Patterns). Pero las comillas dobles son especiales para el shell, por lo que a su
vez deben ser escapadas. Así, para exportar una sola tabla con un nombre en mayúsculas y minúsculas mixtas, necesitas
algo como:
$pg_dump -t "\"MixedCaseName\"" mydb > mytab.sql
Para exportar todas las tablas cuyos nombres comiencen con mytable, excepto la tabla
mytable2, especifica un archivo de filtro filter.txt como:
include table mytable* exclude table mytable2
$pg_dump --filter=filter.txt mydb > db.sql