You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL中存储4位及更小整数(替代Django SmallIntegerField)

在Django+PostgreSQL中存储极小整数的解决方案

如果你需要存储极小的整数(比如4位以内或更小范围),可以通过以下两种方式实现,比SmallIntegerField更节省存储空间:

1. 自定义字段映射PostgreSQL的1字节整数(int1)

PostgreSQL的int1类型仅占用1字节存储空间,范围为**-128到127**,完全满足极小整数的存储需求。Django没有内置对应字段,需自行定义:

from django.db import models
from django.db.models.fields import IntegerField

class TinyIntegerField(IntegerField):
    def db_type(self, connection):
        if connection.vendor == 'postgresql':
            return 'int1'
        return super().db_type(connection)

# 在模型中使用示例
class YourModel(models.Model):
    tiny_number = TinyIntegerField()

这个字段会在PostgreSQL中创建int1类型的列,空间占用比SmallIntegerField的2字节进一步缩减。

2. 使用固定长度的numeric类型(针对4位整数)

如果你的整数是0到9999(或-9999到9999)的4位整数,可以用PostgreSQL的numeric(4,0)类型,存储空间根据数字长度浮动(最多2字节),同样比SmallIntegerField节省:

from django.db import models

class YourModel(models.Model):
    four_digit_num = models.DecimalField(max_digits=4, decimal_places=0)

Django的DecimalField会直接映射到PostgreSQL的numeric类型,max_digits=4, decimal_places=0的配置刚好限制为4位整数,匹配你的需求。

注意事项

  • 确认你的整数范围与所选类型匹配:int1对应-128到127,numeric(4,0)对应-9999到9999。
  • 自定义的TinyIntegerField仅在PostgreSQL中生效,若需兼容其他数据库,可在db_type方法中添加分支处理。

内容的提问来源于stack exchange,提问作者Shayestehhs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 22:05:18