sql >> Databáze >  >> RDS >> PostgreSQL

Je možné v Postgresu uložit 1 bajtové číslo?

Vzhledem k tomu, že režie každého řádku v PostgreSQL je 23 bajtů (HeapTupleHeaderData), pokud vám opravdu záleží na malém prostoru, pravděpodobně jste zvolili špatný způsob ukládání dat.

Bez ohledu na to, protože všechny složitější typy mají svou vlastní režii (bytea přidává čtyři bajty režie, například bitové řetězce 5 až 8), jediný způsob, jak dosáhnout toho, co hledáte, je použít bigint (8 bajtů), numerické posunutí každé hodnoty a sloučení výsledku NEBO. Můžete to provést pomocí operací s bitovým řetězcem abyste kód usnadnili – vypočítejte jako bitový řetězec, pak před uložením přetypujte na bigint – nebo jen ručně vynásobte/přičtěte, chcete-li, aby byla rychlost lepší. Zde je například návod, jak uložit dva bajty dohromady do dvoubajtové struktury a poté je získat zpět:

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

Stejný nápad můžete rozšířit na uložení 7 z nich tímto způsobem. Režie načítání bude stále hrozná, ale ve skutečnosti jste v procesu ušetřili místo. Ale ne příliš ve vztahu pouze k záhlaví řádku.



  1. Bílá kniha statistik CBO

  2. MySQL C API knihovny pro iPhone

  3. Skript se nepřihlásí

  4. Jak zobrazím více naskládaných sloupců pro každé časové období ve skládaném pruhu