El BLOB (LO) escriba almacena los datos en trozos 2KB dentro de las páginas PostgreSQL montón estándar, que por defecto a 8 KB de tamaño. No se almacenan como archivos independientes y cohesivos en el sistema de archivos; por ejemplo, no podría ubicar el archivo, hacer una comparación de byte a byte y esperar que sea el mismo que el archivo original que usted cargado en la base de datos, ya que también hay encabezados y estructuras de la página del montón de Postgres que delinean los fragmentos.
Usted debe evitar el uso de la interfaz del objeto grande (LO) si su aplicación tendría que actualizar con frecuencia los datos binarios, y particularmente si que participan una gran cantidad de, acceso aleatorio pequeño escribe, que debido a la forma en PostgreSQL implementa concurrencia control (MVCC) puede provocar una explosión en la cantidad de espacio en disco utilizado hasta que VACÍO en la base de datos. El mismo resultado probablemente también sea aplicable a los datos almacenados en línea en una columna con el tipo bytea o incluso TOAST'd.
Sin embargo, si sus datos siguen un patrón Write-Once-Read-Many (por ejemplo, cargar una imagen PNG y nunca modificarla después), debería estar bien desde el punto de vista del uso del disco.
Ver this pgsql-general mailing list thread para continuar el debate.
Una respuesta agradable, muy gracias. ¿El tipo bytea se usa para almacenar el contenido en la tabla? –
bytea los datos se almacenarán en la tabla de forma predeterminada si son pequeños, y se moverán a la tabla auxiliar ("tostado") y se comprimirán para valores más grandes. Ver: http://www.postgresql.org/docs/9.1/static/storage-toast.html para una introducción. Puede deshabilitar la compresión del almacenamiento auxiliar, lo que mejorará el rendimiento de recuperar solo partes de los valores. – araqnid
'bytea' es una buena opción para datos binarios. También puede usar 'text' o' varchar' si los datos son textuales y en la misma codificación que la base de datos. –