如何重置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;

它不起作用
如果有任何形式的建议,我将不胜感激!

如果它确实是serialID,则可以使用重置所拥有的SEQUENCE

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

参见:

如何重置postgres';主密钥序列何时不同步?

但是,为什么名称会是uuid?UUID不是integer号,也不是serial号。此外,当你写时,还不完全清楚出了什么问题

UUID没有被重置。

关于ALTER SEQUENCE ... RESTART:

  • Postgres手动更改序列

为了避免重置序列时可能出现的重复id错误,请尝试:

UPDATE table SET id = DEFAULT;
ALTER SEQUENCE seq RESTART;
UPDATE table SET id = DEFAULT;

对于添加的上下文:

  1. 'table'=您的表名

  2. 'id'=您的id列名

  3. 'seq'=使用查找序列名称

    SELECT pg_get_serial_sequence('table', 'id');
    

最新更新