Actualizando a 2012, cuando vemos que los tamaños de imagen, y la cantidad de imágenes, están creciendo y creciendo, en todas las aplicaciones ...
Necesitamos alguna distinción entre "imagen original" e "imagen procesada", como miniatura.
Como dice la respuesta de Jcoby, hay dos opciones, entonces, recomiendo:
use blob (Binary Large OBject): para almacenar imágenes originales, en su mesa. Vea la respuesta de Ivan (¡no hay problema con la copia de seguridad de blobs!), Los módulos adicionales suministrados por PostgreSQL , los procedimientos, etc.
use una base de datos separada con DBlink : para el almacenamiento de imágenes originales, en otra base de datos (unificada / especializada). En este caso, prefiero bytea , pero blob es casi igual. La separación de la base de datos es la mejor manera de tener un "servicio web de imágenes unificadas".
use bytea (BYTE Array): para almacenar en caché imágenes en miniatura. Guarde en caché las pequeñas imágenes para enviarlas rápidamente al navegador web (para evitar problemas de renderizado) y reducir el procesamiento del servidor. Almacene en caché también metadatos esenciales, como ancho y alto. El almacenamiento en caché de la base de datos es la forma más fácil, pero verifique sus necesidades y la configuración del servidor (por ejemplo, módulos Apache): almacenar miniaturas en el sistema de archivos puede ser mejor, compare el rendimiento. Recuerde que es un servicio web (unificado), luego se puede almacenar en una base de datos separada (sin copias de seguridad), sirviendo muchas tablas. Consulte también el manual de tipos de datos binarios de PostgreSQL , pruebas con columna bytea , etc.
NOTA 1: hoy en día, el uso de "soluciones duales" (base de datos + sistema de archivos) está en desuso (!). Hay muchas ventajas de usar "solo base de datos" en lugar de dual. PostgreSQL tiene un rendimiento comparable y buenas herramientas para exportación / importación / entrada / salida.
NOTA 2: recuerde que PostgreSQL solo tiene bytea , no tiene un BLOB predeterminado de Oracle : "El estándar SQL define (...) BLOB. El formato de entrada es diferente de bytea, pero las funciones y operadores provistos son en su mayoría los mismos", Manual .
EDITAR 2014 : Hoy no he cambiado el texto original anterior (mi respuesta fue el 22 de abril de 2012, ahora con 14 votos), estoy abriendo la respuesta para sus cambios (consulte "Modo Wiki", ¡puede editar!), Para corregir y para actualizaciones .
La pregunta es estable (respuesta de @Ivans '08 con 19 votos), por favor, ayude a mejorar este texto.