PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Възможно ли е да се съхрани 1 байт номер в Postgres?

Като се има предвид, че режийните разходи за всеки ред в PostgreSQL са 23 байта (HeapTupleHeaderData), ако наистина ви е грижа за малкото пространство толкова много, вероятно сте избрали грешния начин за съхранение на вашите данни.

Независимо от това, тъй като всички по-сложни типове имат свои собствени служебни данни (bytea добавя четири байта служебни данни, например, битови низове от 5 до 8), единственият начин да постигнете това, което търсите, е да използвате bigint (8 байта), числено преместване на всяка стойност и ИЛИ-обединяване на резултата. Можете да направите това с помощта на операции с битов низ за да направите кода по-лесен - изчислете като битов низ, след това преобразувайте към bigint преди съхраняване - или просто ръчно умножете/добавете, ако искате скоростта да бъде по-добра. Например, ето как съхранявате два байта заедно в двубайтова структура и след това ги връщате обратно:

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

Можете да разширите същата идея в съхраняването на 7 от тях по този начин. Разходите за извличане все още ще бъдат ужасни, но всъщност ще сте спестили малко място в процеса. Но не много по отношение само на заглавката на реда.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Сложна SQL заявка с множество таблици и релации

  2. Как да създадете разширение postgres вътре в контейнера?

  3. Не може да се създаде роля на суперпотребител на PostgreSQL, за да се инсталира и стартира приложение

  4. записваем общ табличен израз и множество изрази за вмъкване

  5. Екраниране на специални знаци в to_tsquery