我最近将一个数据库从mysql迁移到pgsql 9。但是现在,当我试图创建一个新对象(在django管理界面中),它告诉我我正在尝试使用的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');
<table name>_<column name>_seq
foo_id_seq
。如果表已经迁移并且使用 serial 替代 mysql 的自增列,则您的数据可能在不递增序列的情况下进行了迁移。请查找 PostgreSQL 的 setval
函数,将序列设置为高于表中最高现有键值的值。
SELECT setval('nameOfSequence', 42);
- Ketema