Хранение очень маленьких целых чисел в БД (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