Создание поля идентификатора 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