我们是否会在PostgreSQL中用完INTEGER ID以进行频繁操作?

时间:2017-12-12 20:41:18

标签: postgresql

我们的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和序列?

1 个答案:

答案 0 :(得分:0)

  

如果我们这样做,是否可以轻松调整现有的PostgreSQL数据库以使用BIGINT作为ID和序列

序列始终在内部使用bigint,因此您只需使用序列调整列。

但是,将列从integer更改为bigint需要重写表,因为列的存储会发生更改(整数和bigint是固定宽度的数据类型)。这又需要对表进行独占锁定,如果停止访问数据库,这可能会更容易。需要多长时间取决于表格的大小(列数行数)。

  

我们会快速用完INTEGER ID

假设您每周7天,每天24小时每秒“刻录”一个序列号,您将在大约68年内用完整数(如果您允许负数,则会长两倍)。这应该给你足够的时间来计划停机时间。