next up previous contents index
Next: DBI/DBD Up: Pg Previous: La estructura PGresult   Índice General   Índice de Materias


Objetos grandes

En PostgreSQL, el tamaño máximo de una tupla coincide con el del tamaño de página, de 8K, y dado que una tupla no puede ser almacenada en más de una página, la única manera de almacenar objetos más grandes que este tamaño es por medio de la intarfase de objetos grandes.

Dicho de manera escueta, los objetos grandes son almacenados por partes en tuplas (en el sentido interno de PostgreSQL) y se emplean indices B-tree para acelerar el acceso a cada una de las partes que conforman un objeto grande.

Internamente PostgreSQL emplea una interfase semejante a la del manejo de archivos de Unix. Hacia el programador, por medio de libpq, provee de funciones de alto nivel y la implementación para Perl, proveé de métodos adecuados. Estos métodos proveen acceso orientado por archivo para objetos de gran tamaño, con analogías a las funciones de sistema open, close, read, write, lseek y tell. Para ser consistentes, se les añade el prefijo lo_ al ser llamadas.

Para usar la interfase de objetos grandes, es necesario encerrar las operaciones en un bloque de transacciones14.4.

To use the large object (lo) interface, it is necessary to enclose it within a transaction block.

$lobj_fd = $conn->lo_open($lobjId, $mode)
Abre un objeto grande y regresa un OID. El modo de apertura se fija con la variable $mode igual que en el método lo_create. Regresa -1 en caso de error.

$ret = $conn->lo_close($lobj_fd)
Cierra un objeto grande. Regresa 0 en caso de éxito, -1 en caso de error.

$nbytes = $conn->lo_read($lobj_fd, $buf, $len)
Lee $len carácteres en la variable $buf del objeto grande definido por $lobj_fd. Regresa el número de bytes leidos o -1 en caso de error.

$nbytes = $conn->lo_write($lobj_fd, $buf, $len)
Escribe $len bytes de la variable $buf en el objeto grande definido por $lobj_fd. Regresa el número de bytes escritos o -1 en caso de error.

$ret = $conn->lo_lseek($lobj_fd, $offset, $whence)
Cambia de posición el punto de lectura o escritura dentro del objeto grande definido por $obj_id. Actualmente, $whence sólo puede valer 0 (L_SET).

$lobjId = $conn->lo_creat($mode)
Crea un objeto grande. $mode es una máscara de bits que describe los diferentes atributos del objeto. Utiliza las siguientes constantes:


98#98

Estas banderas pueden ser combinadas con OR, como en el caso de abrir para lectura y escritura. En caso de error, regresa el valor definido por la constante PGRES_InvalidOid.

$location = $conn->lo_tell($lobj_fd)
Regresa la posición de lectura o escritura en el objeto grande definido por $lobj_fd.

$ret = $conn->lo_unlink($lobjId)
Borra un objeto grande. Regresa -1 en caso de error.

$lobjId = $conn->lo_import($filename)
Importa un archivo Unix como un objeto grande y regresa el OID del nuevo objeto.

$ret = $conn->lo_export($lobjId, $filename)
Exporta un objeto grande a un archivo Unix. Regresa -1 en caso de error, 1 en caso de éxito.


next up previous contents index
Next: DBI/DBD Up: Pg Previous: La estructura PGresult   Índice General   Índice de Materias
Ismael Olea 2001-04-21