Solución:
Básicamente, hay casos en los que cada uno tiene sentido. bytea es más simple y generalmente preferido. Las bibliotecas cliente le dan la decodificación, por lo que eso no es un problema.
Sin embargo, los LOB tienen algunas características interesantes, como la capacidad de buscar dentro de ellos y tratar el LOB como un flujo de bytes en lugar de una matriz de bytes.
“Grande” significa “Lo suficientemente grande como para no enviarlo al cliente de una vez”. Técnicamente, bytea está limitado a 1GB comprimido y un lob está limitado a 2GB comprimidos, pero de todos modos se alcanza el otro límite primero. Si es lo suficientemente grande, no lo desea directamente en su conjunto de resultados y no desea enviarlo al cliente de una vez, use una LOB.
Pero me preocupa que los campos bytea estén codificados en hexadecimal
La entrada bytea puede estar en formato hexadecimal o de escape, esa es su elección. El almacenamiento será el mismo. A partir de la versión 9.0, la salida predeterminada es hexadecimal, pero puede cambiar esto editando el parámetro bytea_output.
No he visto ningún punto de referencia.