如何在 PostgreSQL 中重置自动生成的主键

问题描述

我的表 topics 类如下。主键是自动生成的序列键。在测试时,我从表中删除了行并尝试再次重新插入它们。 UUID 未重置。

class Topics(db.Model):
    """ User Model for different topics """
    __tablename__ = 'topics'

    uuid = db.Column(db.Integer,primary_key=True)
    topics_name = db.Column(db.String(256),index=True)

    def __repr__(self):
        return '<Post %r>' % self.topics_name

我尝试了以下命令来重置密钥

ALTER SEQUENCE topics_uuid_seq RESTART WITH 1;

它没有用。
我将不胜感激任何形式的建议!

解决方法

如果它确实是 serial ID,您可以使用以下命令重置拥有的 SEQUENCE

SELECT setval(pg_get_serial_sequence('topics','uuid'),max(uuid)) FROM topics;

见:

How to reset postgres' primary key sequence when it falls out of sync?

但是为什么名称会是 uuidUUID 不是 integer 数字,也不是 serial。此外,当您编写时,也不完全清楚出了什么问题:

UUID 未重置。

关于ALTER SEQUENCE ... RESTART