sql >> Database >  >> RDS >> PostgreSQL

Is het mogelijk om een ​​nummer van 1 byte op te slaan in Postgres?

Aangezien de overhead voor elke rij in PostgreSQL 23 bytes (HeapTupleHeaderData), als je zo veel om kleine hoeveelheden ruimte geeft, heb je waarschijnlijk de verkeerde manier gekozen om je gegevens op te slaan.

Hoe dan ook, aangezien alle meer gecompliceerde typen hun eigen overhead hebben (bytea voegt bijvoorbeeld vier bytes overhead toe, bitstrings 5 ​​tot 8), is de enige manier om te bereiken wat u zoekt door een bigint (8 bytes) te gebruiken, numeriek verschuiven van elke waarde en OR-ing samen het resultaat. U kunt dit doen met behulp van de bit string-bewerkingen om de code gemakkelijker te maken - bereken als bitstring en cast vervolgens naar bigint voordat u opslaat - of vermenigvuldig / voeg handmatig toe als u wilt dat de snelheid beter is. Hier ziet u bijvoorbeeld hoe u twee bytes samen opslaat in een structuur van twee bytes en ze vervolgens weer terugkrijgt:

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

Je kunt hetzelfde idee uitbreiden door er 7 op die manier op te slaan. De overhead voor het ophalen zal nog steeds verschrikkelijk zijn, maar u zult tijdens het proces daadwerkelijk wat ruimte hebben bespaard. Maar niet erg veel ten opzichte van alleen de rijkop.



  1. Fout:ORA-06553:PLS-306:verkeerd aantal of typen argumenten in aanroep van procedure

  2. Hoe gebruik ik de huidige datum in een HQL-query met een Oracle-database?

  3. Kan tabelnaam niet oplossen in de buurt van

  4. Waar is mijn ongeldige teken (ORA-00911)