sql >> Databasteknik >  >> RDS >> PostgreSQL

Är det möjligt att lagra ett nummer på 1 byte i Postgres?

Med tanke på att overheaden för en rad i PostgreSQL är 23 byte (HeapTupleHeaderData), om du verkligen bryr dig om små mängder utrymme så mycket har du förmodligen valt fel sätt att lagra dina data.

Oavsett, eftersom alla de mer komplicerade typerna har sin egen overhead (bytea lägger till fyra byte av overhead till exempel, bitsträngar 5 till 8), är det enda sättet att åstadkomma det du letar efter att använda en bigint (8 byte), numeriskt skifta varje värde och ELLER-samla resultatet. Du kan göra detta med bitsträngsoperationer för att göra koden enklare--beräkna som bitsträng, cast sedan till bigint innan du lagrar--eller bara multiplicera/lägg till manuellt om du vill att hastigheten ska bli bättre. Så här lagrar du till exempel två byte tillsammans till en struktur med två byte och sedan får tillbaka dem igen:

int2 = 256 * byte1 + byte2
byte1 = int2 / 256
byte2 = int2 % 256

Du kan utöka samma idé till att lagra 7 av dem på det sättet. Återhämtningen kommer fortfarande att bli hemskt, men du har faktiskt sparat lite utrymme under processen. Men inte särskilt mycket i förhållande till bara radhuvudet.



  1. Hur indexerar man en strängmatriskolumn för pg_trgm `'term' % NÅGON (array_column)`-fråga?

  2. visar en kolumn flera gånger med data från 3 olika datumintervall

  3. MySQL - VISA VARIABLER SOM '%version%' fungerar inte i min Java-applikation

  4. Salesforce TLS 1.0 Utfasning