我在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主键,我很好奇所以我在这里问。是否有任何方法可以在不重新创建表的情况下解决此错误?
希望这能让你更清楚地了解我的问题和感谢。
答案 0 :(得分:3)
显然,从邮件中,您尝试在已存在的列中插入值。如果你在字段上有一个sequencer(就像串行列类型一样),它可能与表不同步,因为你已经完成了一个插入并提供了一个值(而不是让“默认”机制通过获取它来处理它来自音序器的nextval)。如果是这种情况,请使用setval语句将序列器重置为字段的最大值(谷歌如何做到这一点 - 关于该主题的大量帖子)。或者只是继续尝试插入,直到其中一个神奇的工作! ;)