【问题标题】:Django Postgresql reset pk/id fieldDjango Postgresql 重置 pk/id 字段
【发布时间】:2020-11-19 21:13:05
【问题描述】:

我正在将 Django 与 Postgresql 一起使用。使用 sqlite,当我删除所有对象并插入新对象时,pk 重置为 1。但是,使用 Postgresql,pk 不断增加。我遇到了这篇文章(1)。接受的答案要求:

python manage.py sqlsequencereset myapp1 myapp2 myapp3| psql

我的应用是products。但是我不知道在管道的右侧写什么。

这是我尝试过的:

# products is my app name
python manage.py sqlsequencereset products

出现以下消息:

BEGIN;
SELECT setval(pg_get_serial_sequence('"products_category"','id'), coalesce(max("id"), 1), max("id") IS NOT null) FROM "products_category";
SELECT setval(pg_get_serial_sequence('"products_product_categories"','id'), coalesce(max("id"), 1), max("id") IS NOT null) FROM "products_product_categories";
SELECT setval(pg_get_serial_sequence('"products_product"','id'), coalesce(max("id"), 1), max("id") IS NOT null) FROM "products_product";
COMMIT;

然后我尝试了:

python manage.py sqlsequencereset products | psql

这是错误信息:

-bash: psql: command not found
Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>
BrokenPipeError: [Errno 32] Broken pipe

| 后面应该放什么?

【问题讨论】:

    标签: django postgresql


    【解决方案1】:

    你是在windows还是什么的?

    python manage.py sqlsequencereset products 生成您需要执行以重置索引的 SQL 代码。在原始帖子中,想法是将 sql 代码“传递”给 psql 以便执行它(这就是为什么你有一个管道运算符 |)但你不需要它,你只需要执行 sql .

    你有 pgadmin 吗?如果是,只需使用它运行生成的 sql 代码,您的索引将被重置。或者简单地删除并重新创建数据库。请问您为什么要重置索引?

    【讨论】:

    • 有道理!我将生成的 sql 代码粘贴到 pgadmin->tools->Query Tool-> Query Editor,然后点击运行按钮。 pgadmin 说它查询成功返回。但是当我检查我的表时,pk/id 没有改变。你知道为什么吗?谢谢!
    猜你喜欢
    • 2015-12-08
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2022-11-01
    相关资源
    最近更新 更多