Los objetos pequeños (que 500Kb) califican como funcionarán bien como bytea. La principal limitación del tamaño es que tendrá que materializar todo el campo en la memoria primero en el servidor y luego en el cliente (hay formas de hacerlo, pero son limitadas). Para medio megabyte, eso no debería ser un problema, pero si comienzas a almacenar objetos mucho más grandes, es posible que necesites un poco de consideración.
Almacenarlo en el sistema de archivos y almacenar la ubicación (o almacenarlo con el nombre de una clave primaria sustituta de una secuencia SERIAL) es una buena manera de tratar con archivos más grandes, y por supuesto puede aplicarlo aquí también. Las desventajas son que pierdes integridad transaccional (no puedes estar seguro de que tanto el sistema de archivos como la base de datos se actualizaron, entonces necesitas implementar algún tipo de herramienta de verificación para ejecutarlos regularmente para compararlos), y probablemente lo más importante es que puedes ' Obtenga copias de seguridad consistentes (¿y si el archivo fue respaldado y no el registro de db? o al revés). Hay métodos para lidiar con esto también, por supuesto, pero rápidamente se vuelve mucho más complejo que mantener los datos almacenados en la mesa.