postgres autoincrement not updated on explicit id inserts

前端 未结 3 1716
清酒与你
清酒与你 2020-12-04 21:26

I have the following table in postgres:

CREATE TABLE \"test\" (
    \"id\" serial NOT NULL PRIMARY KEY,
    \"value\" text
)

I am doing fol

3条回答
  •  猫巷女王i
    2020-12-04 21:34

    In the recent version of Django, this topic is discussed in the documentation:

    Django uses PostgreSQL’s SERIAL data type to store auto-incrementing primary keys. A SERIAL column is populated with values from a sequence that keeps track of the next available value. Manually assigning a value to an auto-incrementing field doesn’t update the field’s sequence, which might later cause a conflict.

    Ref: https://docs.djangoproject.com/en/dev/ref/databases/#manually-specified-autoincrement-pk

    There is also management command manage.py sqlsequencereset app_label ... that is able to generate SQL statements for resetting sequences for the given app name(s)

    Ref: https://docs.djangoproject.com/en/dev/ref/django-admin/#django-admin-sqlsequencereset

    For example these SQL statements were generated by manage.py sqlsequencereset my_app_in_my_project:

    BEGIN;
    SELECT setval(pg_get_serial_sequence('"my_project_aaa"','id'), coalesce(max("id"), 1), max("id") IS NOT null) FROM "my_project_aaa";
    SELECT setval(pg_get_serial_sequence('"my_project_bbb"','id'), coalesce(max("id"), 1), max("id") IS NOT null) FROM "my_project_bbb";
    SELECT setval(pg_get_serial_sequence('"my_project_ccc"','id'), coalesce(max("id"), 1), max("id") IS NOT null) FROM "my_project_ccc";
    COMMIT;
    

提交回复
热议问题