【问题标题】:postgreSQL: primary key doesn't start on 1postgreSQL:主键不是从 1 开始
【发布时间】:2019-10-15 01:40:46
【问题描述】:

我使用查询 t_id SERIAL PRIMARY KEY 在DB 表中创建了一个名为t_id 的主键。 第一次在1开始很好。然后我删除了所有数据,从那时起,即使我设置为1,它也从2开始。

这是我在 seq 上所做的截图 - 在 pgAdmin4 上定义:

谁知道问题出在哪里?

非常感谢!!

【问题讨论】:

  • 如果当前值 = 1,下一个值(通过记录插入到表中生成)将为 2
  • 我尝试将其设置为 0,然后它显示 setval 的错误消息,表示该值应介于 1 和 2147483647 之间

标签: postgresql auto-increment database-sequence


【解决方案1】:

当前值为 1,因此将提供的下一个值为 2。这是预期的。

doc 对这个话题很有帮助。

请记住,序列将始终为您提供一个以前未使用过的值。所以如果你插入 10 行,然后删除它们,下一个序列值仍然是 11(最后提供的值 + 1)

要重置序列,以便下次调用它时返回 1,您可以这样做

SELECT setval('my_sequence_name', 1, false);  

【讨论】:

  • 我当然尝试将其设置为 0,然后它显示 setval 的错误消息,说明该值应介于 1 和 2147483647 之间。
【解决方案2】:

您的t_id 是主键自动递增序列类型。这些是有序的,您可以使用序列操作函数设置下一个序列的值。

Postgres sequence manipulation functions documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    相关资源
    最近更新 更多