我最近将一个数据库从 mysql 迁移到 pgsql 9。
但是现在当我尝试创建一个新对象(在 django admin 中)时,它告诉我我正在尝试使用的 id(从一个开始并且每次尝试都增加)已经被使用。
我猜有一个指针或索引需要设置为最后使用的 id。我对么?
我最近将一个数据库从 mysql 迁移到 pgsql 9。
但是现在当我尝试创建一个新对象(在 django admin 中)时,它告诉我我正在尝试使用的 id(从一个开始并且每次尝试都增加)已经被使用。
我猜有一个指针或索引需要设置为最后使用的 id。我对么?
当你定义你的表时,相当于 'auto_increment' 的 PostgreSQL 是:
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
.
如果表已迁移并且它使用串行替换 mysql 自动递增列,则您的数据可能已迁移而没有递增串行序列。查找 postgresqlsetval
函数以将您的序列设置为高于表中现有最高键的值。