La implementación de objetos grandes divide estos objetos en «fragmentos» (chunks) y los almacena en filas de la base de datos. Un índice B-tree garantiza búsquedas rápidas para el número de fragmento correcto al realizar lecturas y escrituras de acceso aleatorio.
Los fragmentos almacenados para un objeto grande no tienen por qué ser contiguos. Por ejemplo, si una aplicación abre un nuevo objeto grande, se desplaza al desplazamiento (offset) 1000000 y escribe unos pocos bytes allí, esto no resulta en la asignación de 1000000 bytes de almacenamiento; solo se asignan fragmentos que cubren el rango de bytes de datos realmente escritos. Sin embargo, una operación de lectura leerá ceros para cualquier ubicación no asignada que preceda al último fragmento existente. Esto corresponde al comportamiento común de los archivos de «asignación dispersa» (sparse allocation) en los sistemas de archivos de Unix.
A partir de PostgreSQL 9.0, los objetos grandes tienen
un propietario y un conjunto de permisos de acceso, los cuales se pueden gestionar
mediante GRANT y REVOKE.
Se requieren privilegios SELECT para leer un objeto grande,
y se requieren privilegios UPDATE para escribir en él o
truncarlo.
Solo el propietario del objeto grande (o un superusuario de la base de datos) puede
eliminar, comentar o cambiar el propietario de un objeto grande.
Para ajustar este comportamiento por compatibilidad con versiones anteriores, consulta
el parámetro de configuración lo_compat_privileges.