为什么创建一个带有串行列的表会创建一个最大值为bigint的序列?

时间:2017-02-20 19:12:37

标签: postgresql postgresql-9.4

我对PostgreSql有点困惑和新手,我认为serial = integer和bigserial = bigint,所以当我创建一个带有PK是连续的。

2 个答案:

答案 0 :(得分:1)

the PostgreSQL 9.4 docs for Data Type SERIAL中所述,使用CREATE SEQUENCE tablename_colname_seq隐式创建序列而不使用任何其他参数。

documentation for CREATE SEQUENCE说:

  

可选子句 MAXVALUE maxvalue 确定序列的最大值。如果未提供此子句或指定了 NO MAXVALUE ,则将使用默认值。对于升序和降序序列,默认值分别为2 ^ 63-1和-1。

因此,记录的行为是使用您正在查看的最大值创建序列。

答案 1 :(得分:0)

序列和列是两个不同的东西。序列可以返回大于int4列可以存储的整数。当您指定SERIALBIGSERIAL时,PostgreSQL会将其粗略地翻译为:

  1. 创建一个int4或int8列
  2. 创建序列
  3. 制作列
  4. 所拥有的序列
  5. 使列默认值成为序列
  6. 中的下一个值

    SERIAL是一种便利,但没有实际的列类型SERIAL