我们的PostgreSQL表和序列使用 INTEGER 作为ID。
根据这个,限制是 https://www.postgresql.org/docs/9.6/static/datatype-numeric.html
integer 4 bytes typical choice for integer -2147483648 to +2147483647
该应用程序是一个类似于Outlook的时间线调度程序,可以在每次添加/编辑/删除时删除并重新创建约会。无论何时进行更改,您都可以在时间轴中引入新的差距或删除旧的差距,我们也将其保存为常规约会。
因此,每个常见的添加/编辑/删除操作都有可能耗尽 5-6个新ID (我们将立即保存为Ajax操作),而不仅仅是1.在一天之前由于额外的Gap(“假”-appt。)持久性(这是业务需求),您最终可能会浪费大约30-50个ID。
问题:我们会快速用完INTEGER ID吗? 如果我们这样做,是否可以轻松调整现有的PostgreSQL数据库以使用BIGINT作为ID和序列?
答案 0 :(得分:0)
如果我们这样做,是否可以轻松调整现有的PostgreSQL数据库以使用BIGINT作为ID和序列
序列始终在内部使用bigint,因此您只需使用序列调整列。
但是,将列从integer
更改为bigint
需要重写表,因为列的存储会发生更改(整数和bigint是固定宽度的数据类型)。这又需要对表进行独占锁定,如果停止访问数据库,这可能会更容易。需要多长时间取决于表格的大小(列数和行数)。
我们会快速用完INTEGER ID
假设您每周7天,每天24小时每秒“刻录”一个序列号,您将在大约68年内用完整数(如果您允许负数,则会长两倍)。这应该给你足够的时间来计划停机时间。