vacuumdb

vacuumdb — recolecta basura y analiza una base de datos PostgreSQL

Synopsis

vacuumdb [connection-option...] [option...] [ -t | --table table [( column [,...] )] ] ... [ dbname | -a | --all ]

vacuumdb [connection-option...] [option...] [ -n | --schema schema ] ... [ dbname | -a | --all ]

vacuumdb [connection-option...] [option...] [ -N | --exclude-schema schema ] ... [ dbname | -a | --all ]

Descripción

vacuumdb es una utilidad para limpiar una base de datos PostgreSQL. vacuumdb también generará estadísticas internas utilizadas por el optimizador de consultas de PostgreSQL.

vacuumdb es un envoltorio («wrapper») del comando SQL VACUUM. No hay diferencia efectiva entre vaciar y analizar bases de datos a través de esta utilidad y a través de otros métodos para acceder al servidor.

Opciones

vacuumdb acepta los siguientes argumentos de línea de comandos:

-a
--all

Vacía todas las bases de datos.

--buffer-usage-limit size

Especifica el tamaño del búfer en anillo de la estrategia de acceso al búfer para una invocación determinada de vacuumdb. Este tamaño se utiliza para calcular el número de búferes compartidos que se reutilizarán como parte de esta estrategia. Consulta la VACUUM.

[-d] dbname
[--dbname=]dbname

Especifica el nombre de la base de datos que se va a limpiar o analizar, cuando no se utiliza -a/--all. Si no se especifica, el nombre de la base de datos se lee de la variable de entorno PGDATABASE. Si esta no está configurada, se utiliza el nombre de usuario especificado para la conexión. El parámetro 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.

--disable-page-skipping

Desactiva la omisión de páginas en función del contenido del mapa de visibilidad.

-e
--echo

Muestra los comandos que vacuumdb genera y envía al servidor.

-f
--full

Realiza un vaciado completo («full vacuuming»).

-F
--freeze

«Congela» («freeze») tuplas de forma agresiva.

--force-index-cleanup

Siempre elimina las entradas del índice que apuntan a tuplas muertas.

-j njobs
--jobs=njobs

Ejecuta los comandos vacuum o analyze en paralelo ejecutando simultáneamente njobs comandos. Esta opción puede reducir el tiempo de procesamiento, pero también aumenta la carga en el servidor de la base de datos.

vacuumdb abrirá njobs conexiones a la base de datos, así que asegúrate de que tu configuración de max_connections sea lo suficientemente alta como para admitir todas las conexiones.

Ten en cuenta que usar este modo junto con la opción -f (FULL) puede causar fallas de bloqueo mutuo («deadlock») si ciertos catálogos del sistema se procesan en paralelo.

--min-mxid-age mxid_age

Solo ejecuta los comandos vacuum o analyze en tablas con una edad de ID de multixact de al menos mxid_age. Esta configuración es útil para priorizar las tablas a procesar para evitar el desbordamiento («wraparound») del ID de multixact (consulta la Section 24.1.5.1).

A efectos de esta opción, la edad del ID de multixact de una relación es la mayor de las edades de la relación principal y su tabla TOAST asociada, si existe. Dado que los comandos emitidos por vacuumdb también procesarán la tabla TOAST para la relación si es necesario, no es necesario considerarla por separado.

--min-xid-age xid_age

Solo ejecuta los comandos vacuum o analyze en tablas con una edad de ID de transacción de al menos xid_age. Esta configuración es útil para priorizar las tablas a procesar para evitar el desbordamiento («wraparound») del ID de transacción (consulta la Section 24.1.5).

A efectos de esta opción, la edad del ID de transacción de una relación es la mayor de las edades de la relación principal y su tabla TOAST asociada, si existe. Dado que los comandos emitidos por vacuumdb también procesarán la tabla TOAST para la relación si es necesario, no es necesario considerarla por separado.

--missing-stats-only

Solo analiza las relaciones a las que les falten estadísticas para una columna, expresión de índice o estructura de estadísticas extendidas. Cuando se usa con --analyze-in-stages, esta opción evita que vacuumdb reemplace temporalmente las estadísticas existentes con las generadas con objetivos de estadísticas más bajos, evitando así decisiones temporalmente peores del optimizador de consultas.

Esta opción solo se puede utilizar junto con --analyze-only o --analyze-in-stages.

Ten en cuenta que --missing-stats-only requiere privilegios de SELECT en pg_statistic y pg_statistic_ext_data, que están restringidos a los superusuarios de forma predeterminada.

-n schema
--schema=schema

Limpia o analiza todas las tablas en schema únicamente. Se pueden vaciar múltiples esquemas escribiendo múltiples opciones -n.

-N schema
--exclude-schema=schema

No limpia ni analiza ninguna tabla en schema. Se pueden excluir múltiples esquemas escribiendo múltiples opciones -N.

--no-index-cleanup

No elimina las entradas del índice que apuntan a tuplas muertas.

--no-process-main

Omite la relación principal.

--no-process-toast

Omite la tabla TOAST asociada con la tabla a vaciar, si la hay.

--no-truncate

No trunca las páginas vacías al final de la tabla.

-P parallel_workers
--parallel=parallel_workers

Especifica el número de procesos de trabajo paralelos («parallel workers») para el vaciado en paralelo. Esto permite que el vaciado aproveche múltiples CPU para procesar índices. Consulta la VACUUM.

-q
--quiet

No muestra mensajes de progreso.

--skip-locked

Omite las relaciones que no se pueden bloquear inmediatamente para su procesamiento.

-t table [ (column [,...]) ]
--table=table [ (column [,...]) ]

Limpia o analiza table únicamente. Los nombres de las columnas se pueden especificar solo junto con las opciones --analyze o --analyze-only. Se pueden vaciar múltiples tablas escribiendo múltiples opciones -t.

Tip

Si especificas columnas, probablemente tendrás que escapar los paréntesis para que no los interprete la shell. (Consulta los ejemplos a continuación).

-v
--verbose

Imprime información detallada durante el procesamiento.

-V
--version

Imprime la versión de vacuumdb y sale.

-z
--analyze

También calcula estadísticas para uso del optimizador.

-Z
--analyze-only

Solo calcula estadísticas para uso del optimizador (sin vacuum).

--analyze-in-stages

Solo calcula estadísticas para uso del optimizador (sin vacuum), como --analyze-only. Ejecuta tres etapas de análisis; la primera etapa utiliza el objetivo de estadísticas más bajo posible (consulta la default_statistics_target) para producir estadísticas utilizables más rápido, y las etapas subsiguientes construyen las estadísticas completas.

Esta opción solo es útil para analizar una base de datos que actualmente no tiene estadísticas o que tiene estadísticas totalmente incorrectas, como si se acabara de poblar a partir de un volcado restaurado o por pg_upgrade. Ten en cuenta que ejecutar con esta opción en una base de datos con estadísticas existentes puede hacer que las decisiones del optimizador de consultas empeoren temporalmente debido a los bajos objetivos de estadísticas de las primeras etapas.

-?
--help

Muestra la ayuda sobre los argumentos de línea de comandos de vacuumdb y sale.

vacuumdb también acepta los siguientes argumentos de línea de comandos para los parámetros de conexión:

-h host
--host=host

Especifica el nombre de host de la máquina en la que se está ejecutando el servidor. Si el valor comienza con una barra diagonal, se utiliza como el directorio para el socket de dominio Unix.

-p port
--port=port

Especifica el puerto TCP o la extensión del archivo de socket de dominio Unix local en el que el servidor está escuchando conexiones.

-U username
--username=username

Nombre de usuario con el que conectarse.

-w
--no-password

Nunca solicita una contraseña. Si el servidor requiere autenticación de 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 («batch jobs») y scripts donde no hay ningún usuario presente para ingresar una contraseña.

-W
--password

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

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

--maintenance-db=dbname

Cuando se utiliza -a/--all, se conecta a esta base de datos para recopilar la lista de bases de datos a vaciar. Si no se especifica, se utilizará la base de datos postgres, o si no existe, se utilizará template1. 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. Además, los parámetros de la cadena de conexión distintos del propio nombre de la base de datos se reutilizarán al conectarse a otras bases de datos.

Entorno

PGDATABASE
PGHOST
PGPORT
PGUSER

Parámetros de conexión predeterminados

PG_COLOR

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

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

Diagnóstico

En caso de dificultad, consulta la VACUUM y la psql para obtener discusiones sobre problemas potenciales y mensajes de error. El servidor de la base de datos debe estar ejecutándose en el host objetivo. Además, se aplicará cualquier configuración de conexión predeterminada y variable de entorno utilizada por la biblioteca cliente libpq.

Ejemplos

Para limpiar la base de datos test:

$ vacuumdb test

Para limpiar y analizar para el optimizador una base de datos llamada bigdb:

$ vacuumdb --analyze bigdb

Para limpiar una sola tabla foo en una base de datos llamada xyzzy, y analizar una sola columna bar de la tabla para el optimizador:

$ vacuumdb --analyze --verbose --table='foo(bar)' xyzzy

Para limpiar todas las tablas en los esquemas foo y bar en una base de datos llamada xyzzy:

$ vacuumdb --schema='foo' --schema='bar' xyzzy

Véase también

VACUUM