Administración de objetos grandes con el módulo lo
El módulo lo (extensión) es para usuarios de base de datos y desarrolladores que trabajan con bases de datos PostgreSQL mediante controladores JDBC u ODBC. Tanto JDBC como ODBC esperan que la base de datos se encargue de eliminar los objetos grandes cuando cambian las referencias a ellos. No obstante, PostgreSQL no funciona así. PostgreSQL no asume que un objeto se deba eliminar cuando cambie su referencia. El resultado es que los objetos permanecen en el disco, sin referencia. La extensión lo incluye una función que se utiliza para desencadenarse en los cambios de referencia con el fin de eliminar objetos si es necesario.
sugerencia
Para determinar si su base de datos se puede beneficiar de la extensión lo, utilice la utilidad vacuumlo para comprobar si hay objetos grandes huérfanos. Para obtener el recuento de los objetos grandes huérfanos sin realizar ninguna acción, ejecute la utilidad con la opción -n
(sin operación). Para saber cómo, consulte vacuumlo utility a continuación.
El módulo lo está disponible para Aurora PostgreSQL 13.7, 12.11, 11.16, 10.21 y versiones secundarias posteriores.
Para instalar el módulo (extensión), necesita privilegios de rds_superuser
. La instalación de la extensión lo agrega a su base de datos:
lo
: es un tipo de datos de objeto grande (lo) que puede utilizar para objetos binarios grandes (BLOB) y otros objetos de gran tamaño. El tipo de datoslo
es un dominio del tipo de datosoid
. Es decir, se trata de un identificador de objeto con restricciones opcionales. Para obtener más información, consulte Object identifiers(Identificadores de objetos) en la documentación de PostgreSQL. Dicho de forma sencilla, puede utilizar el tipo de datos lo
para distinguir las columnas de base de datos que contienen referencias a objetos grandes de otros identificadores de objetos (OID).-
lo_manage
: es una función que puede utilizar en los desencadenadores de las columnas de tabla que contienen referencias a objetos grandes. Siempre que elimine o modifique un valor que haga referencia a un objeto grande, el desencadenador desvincula el objeto (lo_unlink
) de su referencia. Utilice el desencadenador en una columna solo si esta es la única referencia de base de datos al objeto grande.
Para obtener más información sobre el módulo de objetos grandes, consulte lo
Instalación de la extensión lo
Antes de instalar la extensión lo, asegúrese de que dispone de privilegios de rds_superuser
.
Para instalar la extensión lo
Use
psql
para conectarse a la instancia de base de datos principal de su clúster de base de datos de Aurora PostgreSQL.psql --host=
your-cluster-instance-1.666666666666
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --passwordEscriba la contraseña cuando se le solicite. El cliente
psql
se conecta y muestra la base de datos de conexión administrativa predeterminada,postgres=>
, como el símbolo del sistema.Instale la extensión de la siguiente manera:
postgres=>
CREATE EXTENSION lo;
CREATE EXTENSION
Ahora puede utilizar el tipo de datos lo
para definir columnas en las tablas. Por ejemplo, puede crear una tabla (images
) que contenga datos de imágenes rasterizadas. Puede utilizar el tipo de datos lo
para una columna raster
, como se muestra en el siguiente ejemplo, que crea una tabla.
postgres=>
CREATE TABLE images (image_name text, raster lo);
Uso de la función de desencadenador lo_manage para eliminar objetos
Puede utilizar la función lo_manage
en un desencadenador en lo
o en otras columnas de objetos grandes para limpiar (y evitar los objetos huérfanos) cuando lo
se actualiza o se elimina.
Para configurar desencadenadores en columnas que hacen referencia a objetos grandes
Haga una de las siguientes acciones:
-
Cree un desencadenador BEFORE UPDATE OR DELETE en cada columna para que contenga referencias únicas a objetos grandes, con el nombre de columna como argumento.
postgres=>
CREATE TRIGGER t_raster BEFORE UPDATE OR DELETE ON images FOR EACH ROW EXECUTE FUNCTION lo_manage(raster); -
Aplique un desencadenador solo cuando la columna se esté actualizando.
postgres=>
CREATE TRIGGER t_raster BEFORE UPDATE OF images FOR EACH ROW EXECUTE FUNCTION lo_manage(raster);
-
La función de desencadenador lo_manage
solo funciona en el contexto de la inserción o eliminación de datos de columna, en función de cómo se defina el desencadenador. No tiene ningún efecto cuando se realiza una operación DROP
o TRUNCATE
en una base de datos. Esto significa que debe eliminar las columnas de objeto de cualquier tabla antes de suprimirla, para evitar que se creen objetos huérfanos.
Por ejemplo, suponga que desea eliminar la base de datos que contiene la tabla images
. Elimina la columna de la siguiente manera.
postgres=>
DELETE FROM images COLUMN raster
Si se supone que la función lo_manage
está definida en esa columna para gestionar las eliminaciones, ahora puede eliminar la tabla con seguridad.
Con la utilidad vacuumlo
La utilidad vacuumlo identifica y puede eliminar los objetos grandes huérfanos de las bases de datos. Esta utilidad está disponible desde PostgreSQL 9.1.24. Si los usuarios de la base de datos trabajan habitualmente con objetos grandes, le recomendamos que ejecute vacuumlo de vez en cuando para limpiar los objetos grandes huérfanos.
Antes de instalar la extensión lo, puede utilizar vacuumlo para evaluar si se puede beneficiar su clúster de bases de datos Aurora PostgreSQL. Para ello, ejecute vacuumlo
con la opción -n
(sin operación) para mostrar lo que se eliminaría, como se presenta a continuación:
$
vacuumlo -v -n -h
your-cluster-instance-1.666666666666
.aws-region
.rds.amazonaws.com -p 5433 -U postgresdocs-lab-spatial-db
Password:
*****
Connected to database "docs-lab-spatial-db" Test run: no large objects will be removed! Would remove 0 large objects from database "docs-lab-spatial-db".
Como muestra la salida, los objetos grandes huérfanos no son un problema para esta base de datos concreta.
Para obtener más información sobre esta utilidad, consulte vacuumlo