Создание поля идентификатора GENERATED ALWAYS AS IDENTITY в таблице базы данных PostgreSQL 14+ с помощью Django 4.1.x

Я хотел бы, чтобы Django 4.1.x (на момент написания статьи я использую 4.1.3) создал таблицу PostgreSQL (v14+), для которой должен быть создан идентификатор id, как если бы я создавал таблицу с помощью этого фрагмента SQL для поля id: id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY.

Обычно это заканчивается схемой, подобной этой в PG 15:

$ pg_dump --table table --schema-only -d postgres

-- multiple SET statements here (...)

CREATE TABLE public.table (
    id bigint NOT NULL,
    name character varying(1024) NOT NULL
);


ALTER TABLE public.table OWNER TO postgres;

ALTER TABLE public.table ALTER COLUMN id ADD GENERATED ALWAYS AS IDENTITY (
    SEQUENCE NAME public.table_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1
);

ALTER TABLE ONLY public.table
    ADD CONSTRAINT table_pkey PRIMARY KEY (id);

Вот моя текущая модель в Django:

class Foo(models.Model):
    name = models.CharField(
        max_length=256,
        verbose_name=_("Name"),
        null=False,
    )

    def __str__(self):
        return f"{self.name}"

На самом деле эта таблица (makemigrations/migrate) создается с помощью следующего оператора ALTER вместо этого:

ALTER TABLE public.table ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY (
    SEQUENCE NAME public.table_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1
);

Как я могу этого достичь, если это возможно?

Я не могу найти ничего о типе identity PostgreSQL в doc:
https://docs.djangoproject.com/en/4.1/ref/models/fields/#bigautofield

Поле идентификации PostgreSQL:
https://www.enterprisedb.com/blog/postgresql-10-identity-columns-explained

Вернуться на верх