Като се има предвид, че режийните разходи за всеки ред в PostgreSQL са 23 байта (HeapTupleHeaderData), ако наистина ви е грижа за малкото пространство толкова много, вероятно сте избрали грешния начин за съхранение на вашите данни.
Независимо от това, тъй като всички по-сложни типове имат свои собствени служебни данни (bytea добавя четири байта служебни данни, например, битови низове от 5 до 8), единственият начин да постигнете това, което търсите, е да използвате bigint (8 байта), числено преместване на всяка стойност и ИЛИ-обединяване на резултата. Можете да направите това с помощта на операции с битов низ за да направите кода по-лесен - изчислете като битов низ, след това преобразувайте към bigint преди съхраняване - или просто ръчно умножете/добавете, ако искате скоростта да бъде по-добра. Например, ето как съхранявате два байта заедно в двубайтова структура и след това ги връщате обратно:
int2 = 256 * byte1 + byte2
byte1 = int2 / 256
byte2 = int2 % 256
Можете да разширите същата идея в съхраняването на 7 от тях по този начин. Разходите за извличане все още ще бъдат ужасни, но всъщност ще сте спестили малко място в процеса. Но не много по отношение само на заглавката на реда.