PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Czy w Postgresie można przechowywać jednobajtową liczbę?

Biorąc pod uwagę, że obciążenie dla dowolnego wiersza w PostgreSQL wynosi 23 bajty (HeapTupleHeaderData), jeśli naprawdę zależy Ci na tak małej ilości miejsca, prawdopodobnie wybrałeś zły sposób przechowywania danych.

Niezależnie od tego, ponieważ wszystkie bardziej skomplikowane typy mają swój własny narzut (bytea dodaje cztery bajty narzutu, na przykład ciągi bitów od 5 do 8), jedynym sposobem na osiągnięcie tego, czego szukasz, jest użycie bigint (8 bajtów), numerycznie przesuwając każdą wartość i łącząc wynik ORAZ. Możesz to zrobić za pomocą operacji na ciągach bitowych aby kod był łatwiejszy — obliczyć jako ciąg bitów, a następnie rzutować na bigint przed zapisaniem — lub po prostu ręcznie pomnóż/dodaj, jeśli chcesz, aby szybkość była lepsza. Na przykład, oto jak zapisać dwa bajty razem w dwubajtowej strukturze, a następnie odzyskać je z powrotem:

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

Możesz rozszerzyć ten sam pomysł na przechowywanie 7 z nich w ten sposób. Koszty pobierania nadal będą straszne, ale w rzeczywistości zaoszczędzisz trochę miejsca w tym procesie. Ale nie za bardzo w stosunku do samego nagłówka wiersza.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przejście z MySQL na PostgreSQL - wskazówki, triki i niedogodności?

  2. Odwoływanie się do zmiennych sesji (\set var='value') z PL/PGSQL

  3. Uzyskaj identyfikator ostatniej wkładki po przygotowanej wkładce z PDO

  4. Skrypt PHP\HTML do automatycznego wypełniania pól formularzy po wybraniu elementu z listy rozwijanej

  5. Jak sprawić, by alembik emitował niestandardowy DDL na after_create?