5

我最近将一个数据库从 mysql 迁移到 pgsql 9。

但是现在当我尝试创建一个新对象(在 django admin 中)时,它告诉我我正在尝试使用的 id(从一个开始并且每次尝试都增加)已经被使用。

我猜有一个指针或索引需要设置为最后使用的 id。我对么?

4

2 回答 2

7

当你定义你的表时,相当于 '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.

于 2011-11-03T10:46:50.730 回答
2

如果表已迁移并且它使用串行替换 mysql 自动递增列,则您的数据可能已迁移而没有递增串行序列。查找 postgresqlsetval函数以将您的序列设置为高于表中现有最高键的值。

于 2011-11-03T10:59:21.730 回答