Каков приемлемый метод для генерации первичного ключа с автоматическим добавлением в PostgreSQL?

Нет ли простого способа сделать это без последовательности и триггеров? У меня средние навыки SQL, и я хочу использовать стандартный отраслевой метод для pl/sql (PostgreSQL). Я в основном конвертирую эту таблицу из Spring Безопасность:

create table group_members (
    id bigint generated by default as identity(start with 0) primary key,
    username varchar(50) not null,
    group_id bigint not null,
    constraint fk_group_members_group foreign key(group_id) references groups(id));

Что я до сих пор:

CREATE TABLE auth_group_members (
    id NUMBER,
    username VARCHAR(50) NOT NULL,
    group_id NUMBER NOT NULL,
    CONSTRAINT "FK_AuthGroupMembers" FOREIGN KEY(group_id) REFERENCES auth_groups(id)
);

Ответ 1

Стандартным способом было бы использовать serial или bigserial:

Типы данных serial и bigserial не являются истинными типами, а просто удобством для создания уникальных столбцов идентификатора (аналогично свойству AUTO_INCREMENT, поддерживаемому некоторыми другими базами данных).
[...]
Таким образом, мы создали целочисленный столбец и установили его значения по умолчанию, которые должны быть назначены из генератора последовательности.

Итак, вы должны создать таблицу с чем-то вроде этого:

CREATE TABLE auth_group_members (
    id bigserial primary key,
    username VARCHAR(50) NOT NULL,
    group_id NUMBER NOT NULL,
    CONSTRAINT "FK_AuthGroupMembers" FOREIGN KEY(group_id) REFERENCES auth_groups(id)
);

Типы serial и bigserial создают последовательности за кулисами, но вам никогда не придется напрямую работать с этой последовательностью.