【问题标题】:Postgresql setting next id to write toPostgresql设置下一个要写入的ID
【发布时间】:2011-12-21 01:29:22
【问题描述】:

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

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

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

【问题讨论】:

  • 您可以将列的类型设置为serial,postgreSQL会自动为您创建一个序列。
  • 我几乎可以肯定它是,因为该表是由 django 创建的。
  • 我在这里找到了答案:stackoverflow.com/questions/1709705/…

标签: mysql django postgresql postgresql-9.0


【解决方案1】:

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

【讨论】:

  • django 已经创建了一个表和一个序列。所以我不必创建序列和更改表。但有效的是:select setval('uploads_id_seq', 6965); (上传是表名)
【解决方案2】:

如果表被迁移并且它使用串行替换mysql自动增量列,那么您的数据可能在没有增加串行序列的情况下被迁移。查找 postgresql setval 函数,将您的序列设置为高于表中现有最高键的值。

【讨论】:

猜你喜欢
  • 2016-10-31
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
相关资源
最近更新 更多