postgresql - 错误23505重复键值违反唯一约束'foo_column_key'(不是主键)

时间:2014-06-24 15:37:14

标签: postgresql

我在postgresql中的新功能,当我测试我的代码插入时,我收到以下错误消息

  

错误异常('ERROR','23505','重复键值违反唯一约束“foo_column_key”');

我曾尝试在cursor.execute()代码之后立即使用connection.commit()或connection.rollback()。

问题:

如何在不重新创建表格的情况下修复此错误“select setval('foo_id_seq',1)”?在我尝试使用“reindex table foo”之前从postgres但不工作和运行提交或从psql回滚也不起作用(也许差异连接ID)。还搜索谷歌重置所有交易数据或使用上面的搜索键我的标题,但没有找到任何解决方案。

任何人都可以帮助我或告诉我解决这个问题的方向吗?

谢谢。

修改

抱歉,也许这清楚地表达了我的问题:

create table foo(
  foo_id serial unique not null primary key,
  foo_column character(35) unique not null
);

我使用编程代码中的sql命令插入数据:

insert into foo(foo_column) values('my_email@test.com');

首先我通过“select * from foo;”检查表中的数据,但是没有数据插入。我再次通过刷新页面(cgi应用程序)重新运行代码,然后我收到了该消息,然后我再次检查select * from foo;表,但没有插入。这是我第一次使用insert是事务,在我使用没有事务的mysql之前。

我试图找到解决方案,但总是发现解决方案是用于列序列/ bigserial主键,我很好奇所以我在这里问。是否有任何方法可以在不重新创建表的情况下解决此错误?

希望这能让你更清楚地了解我的问题和感谢。

1 个答案:

答案 0 :(得分:3)

显然,从邮件中,您尝试在已存在的列中插入值。如果你在字段上有一个sequencer(就像串行列类型一样),它可能与表不同步,因为你已经完成了一个插入并提供了一个值(而不是让“默认”机制通过获取它来处理它来自音序器的nextval)。如果是这种情况,请使用setval语句将序列器重置为字段的最大值(谷歌如何做到这一点 - 关于该主题的大量帖子)。或者只是继续尝试插入,直到其中一个神奇的工作! ;)