Хранение очень маленьких целых чисел в БД (PostgreSQL)

Как хранить очень маленькое целое число Integer (4 бита) в моей базе данных?

Привет.🙌
В моей модели я хочу хранить очень маленькое целое число в моей БД и я не хочу использовать SmallIntegerField.
Потому что Django будет хранить 16 байт данных в БД, что слишком много для моих нужд. Как я могу хранить в PostgreSQL целые числа размером 4 бита или даже меньше?
Спасибо за помощь.🙏

Как сказал Адриан, наименьшее хранилище для самого PostgreSQL - 2 байта. Нет ничего меньше этого.

Если вы хотите сделать ограничение, создайте проверку на максимум через метод save в модели Django или добавьте валидатор поля в поле Django.

2 байта - самый маленький, но больше ничего нет

Если вам действительно нужна база данных с такими ограничениями, вы можете установить расширение и сделать собственное поле БД, следуя следующим образом:

https://dba.stackexchange.com/questions/159090/how-to-store-one-byte-integer-in-postgresql

В Postgres вы можете использовать char(1) в качестве типа данных, который хранится в 1 байте, если ваша база данных имеет кодировку UTF-8 и значения, которые вы храните, соответствуют значениям ascii меньше 128 (см. wikipedia) :

CREATE TABLE test (verysmallinteger char(1)) ;

Затем вы можете хранить целочисленное значение i от 1 до 32 с помощью :

INSERT INTO test (verysmallinteger ) VALUES chr(i+32)

и вы можете получить сохраненные значения с помощью :

SELECT ascii(verysmallinteger) - 32 FROM test

смотрите dbfiddle

Вернуться на верх