SQL问题:重复的键值违反了唯一约束

SQL问题:重复的键值违反了唯一约束,sql,postgresql-10,Sql,Postgresql 10,我正在PGAdmin4上运行Postgres10 为了查看数据库是否不同步,我正在检查主键和主键序列 我正在运行此查询以检查主键: schema_name.table_name中的最大(sid)返回1032 sid是主键 schema_name是我的表所在的架构 table_name是违反唯一约束的表的名称 我正在运行此查询以检查主键序列: 选择nextval(pg_get_serial_sequence('schema_name.table_name','sid')返回1042(当前

我正在PGAdmin4上运行Postgres10

为了查看数据库是否不同步,我正在检查主键和主键序列

我正在运行此查询以检查主键:

  • schema_name.table_name中的最大(sid)返回1032

    • sid是主键

    • schema_name是我的表所在的架构

    • table_name是违反唯一约束的表的名称

我正在运行此查询以检查主键序列:

  • 选择nextval(pg_get_serial_sequence('schema_name.table_name','sid')返回1042(当前值为1041)
引用这个所以:我引用这个堆栈溢出:


但是post已经9年了,解决方案只检查主键的max是否大于序列的下一个值(在我的例子中不是这样).

当一个自定义程序将记录插入到表中,并在另一个程序使用sequence
nextval
插入到同一个表中时,我遇到了一个键与序列不同步的问题

这可能会产生重复的关键问题

我会检查以确保您没有与此冲突的程序


完全避免此类问题的更好方法是使用
IDENTITY
type列。虽然我不知道Postgres是否支持这种数据类型。

当一个自定义程序将记录插入到表中,并在另一个程序使用sequence
nextval
插入到同一个表中时,我遇到了一个键与序列不同步的问题

这可能会产生重复的关键问题

我会检查以确保您没有与此冲突的程序


完全避免此类问题的更好方法是使用
IDENTITY
type列。虽然我不知道Postgres是否支持这种数据类型。

我不明白为什么主键和序列必须相互关联。您是否熟悉
delete
?我也不知道这项检查与文章的标题有什么关系。行可以从表中删除,但下一行不会更改。您是否对表进行了任何审核以查看是否删除了行?为什么您关心
sid
值是否为串行值?它们只是需要不同而已。小心,所以运行该命令无论如何都会使事情去同步。您可能需要
currval
。除此之外,忽略序列中的表观值。把它们当作“内存地址”,就像使用C++语言中的指针一样:“值”是没有意义的,在你的控制之外。因为序列大于你表上的最大ID,你必须得到<代码> SQL问题:重复的键值违反了其他唯一的唯一的约束< /代码>。除非您在序列上查询nextval的次数足够多,否则插入不再生成错误。我不明白为什么主键和序列必须相互关联。您是否熟悉
delete
?我也不知道这项检查与文章的标题有什么关系。行可以从表中删除,但下一行不会更改。您是否对表进行了任何审核以查看是否删除了行?为什么您关心
sid
值是否为串行值?它们只是需要不同而已。小心,所以运行该命令无论如何都会使事情去同步。您可能需要
currval
。除此之外,忽略序列中的表观值。把它们当作“内存地址”,就像使用C++语言中的指针一样:“值”是没有意义的,在你的控制之外。因为序列大于你表上的最大ID,你必须得到<代码> SQL问题:重复的键值违反了其他唯一的唯一的约束< /代码>。除非您在序列上查询nextval的次数足够多,否则插入不会再生成错误。