Da der Overhead für jede Zeile in PostgreSQL 23 Bytes
Unabhängig davon, da alle komplizierteren Typen ihren eigenen Overhead haben (Bytea fügt beispielsweise vier Bytes Overhead hinzu, Bitfolgen 5 bis 8), ist die einzige Möglichkeit, das zu erreichen, was Sie suchen, die Verwendung von Bigint (8 Bytes). numerisches Verschieben jedes Werts und OR-Verknüpfung des Ergebnisses. Sie können dies mit den Bitstringoperationen tun Um den Code einfacher zu machen - als Bit-String berechnen, dann vor dem Speichern in bigint umwandeln - oder einfach manuell multiplizieren/addieren, wenn Sie eine bessere Geschwindigkeit wünschen. So speichern Sie beispielsweise zwei Bytes zusammen in einer Zwei-Byte-Struktur und erhalten sie dann wieder zurück:
int2 = 256 * byte1 + byte2
byte1 = int2 / 256
byte2 = int2 % 256
Sie können dieselbe Idee erweitern, indem Sie 7 davon auf diese Weise speichern. Der Abruf-Overhead wird immer noch schrecklich sein, aber Sie haben dabei tatsächlich etwas Platz gespart. Aber nicht sehr viel in Bezug auf den Zeilenkopf.