Dado que la sobrecarga de cualquier fila en PostgreSQL es 23 bytes (HeapTupleHeaderData), si realmente le importan tanto las pequeñas cantidades de espacio, probablemente haya elegido la forma incorrecta de almacenar sus datos.
Independientemente, dado que todos los tipos más complicados tienen su propia sobrecarga (bytea agrega cuatro bytes de sobrecarga, por ejemplo, cadenas de bits 5 a 8), la única forma de lograr lo que está buscando es usar un bigint (8 bytes), desplazando numéricamente cada valor y combinando con OR el resultado. Puede hacer esto usando las operaciones de cadena de bits para facilitar el código, calcule como una cadena de bits, luego envíe a bigint antes de almacenar, o simplemente multiplique/agregue manualmente si desea que la velocidad sea mejor. Por ejemplo, así es como almacena dos bytes juntos en una estructura de dos bytes y luego los recupera:
int2 = 256 * byte1 + byte2
byte1 = int2 / 256
byte2 = int2 % 256
Puede extender la misma idea para almacenar 7 de ellos de esa manera. La sobrecarga de recuperación seguirá siendo terrible, pero en realidad habrá ahorrado algo de espacio en el proceso. Pero no mucho en relación solo con el encabezado de la fila.