我有和现有的数据库,我已经用SQLAlchemy迁移到一个新的PostgreSQL数据库。
我用与以前相同的值移动了所有主键。现在我有了充满数据的表,但是相关的序列从1开始,我将pk值存储在1到2000之间。
现在,当我试图用Django保存一些东西时,我有
重复键值违反了对主键的唯一约束。
如何修改序列开始值或避免这种情况?
我目前的解决办法是:
conn = psycopg2.connect(...)
for table_name in table_names:
cursor = conn.cursor()
cursor.execute("""
SELECT setval('%s_id_seq', (SELECT COALESCE(MAX(id),0)+1 FROM %s));
"""% (table_name, table_name))对我有用,但我不喜欢。
发布于 2011-10-04 23:46:50
在PostgreSQL中设置/重置序列的方法
(不一定是max(id))。
,
setval()将序列设置为以任意数字开始:选择setval('tbl_id_seq');
ALTER SEQUENCE进行相同操作的标准SQL方式:ALTERSequencemyseqwith1;
创建表foo(id串行,文本);--创建序列"foo_id_seq“插入foo(a)值(‘a’);-- seq。从->1 foo_id_seq开始,从10开始;--不重新启动序列插入到foo(a)值(‘b’);->2 foo_id_seq重新启动序列插入到foo(a)值(‘c’);->10
截断foo重新启动标识;
隐式执行ALTER SEQUENCE foo_id_seq RESTART;
https://stackoverflow.com/questions/7504513
复制相似问题