PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

É possível armazenar um número de 1 byte no Postgres?


Dado que a sobrecarga para qualquer linha no PostgreSQL é 23 bytes (HeapTupleHeaderData), se você realmente se preocupa tanto com pequenas quantidades de espaço, provavelmente escolheu a maneira errada de armazenar seus dados.

Independentemente disso, como todos os tipos mais complicados têm sua própria sobrecarga (bytea adiciona quatro bytes de sobrecarga, por exemplo, cadeias de bits de 5 a 8), a única maneira de realizar o que você está procurando é usar um bigint (8 bytes), deslocando numericamente cada valor e fazendo OR junto com o resultado. Você pode fazer isso usando as operações de string de bits para tornar o código mais fácil - calcule como uma string de bits e, em seguida, converta para bigint antes de armazenar - ou apenas multiplique/adicione manualmente se você quiser que a velocidade seja melhor. Por exemplo, veja como você armazena dois bytes juntos em uma estrutura de dois bytes e os recupera novamente:
int2 = 256 * byte1 + byte2
byte1 = int2 / 256
byte2 = int2 % 256

Você pode estender a mesma ideia para armazenar 7 deles dessa maneira. A sobrecarga de recuperação ainda será terrível, mas você terá economizado algum espaço no processo. Mas não muito em relação apenas ao cabeçalho da linha.