我最近将一个数据库从mysql迁移到pgsql 9.
但是现在,当我尝试创建一个新的对象(在django admin),它告诉我,我试图使用的id(从1开始,每次我尝试增加)已经被使用。
我猜有一个指针或索引需要设置为最后使用的id。我说的对吗?
当你定义你的表时,PostgreSQL相当于'auto_increment'的是:
CREATE TABLE foo (
id SERIAL,
...
);
如果您的表已经创建(我怀疑是),您可以手动添加:
CREATE SEQUENCE foo_id_seq;
ALTER TABLE foo ALTER COLUMN id SET DEFAULT nextval('foo_id_seq');
请注意,如果您想坚持使用Pg 将给您的默认名称使用以下格式作为您的序列名称:
<table name>_<column name>_seq
在我的例子中,foo_id_seq
.
如果表被迁移,并且它使用serial来替换mysql的auto increment列,那么您的数据可能是在没有增加串行序列的情况下迁移的。查找postgresql setval
函数,将序列设置为高于表中现有键的值。