Каков приемлемый метод для генерации автоинкрементного первичного ключа в PostgreSQL? - PullRequest
10 голосов
/ 14 мая 2011

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

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)
);

Ответы [ 2 ]

13 голосов
/ 14 мая 2011

Стандартным способом было бы использовать 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 создают последовательности за кулисами, но у вас никогда нетработать с последовательностью напрямую.

1 голос
/ 16 апреля 2018

В PostgreSQL 10 вы можете использовать identity columns. Вот пример:

create table group_members (
    id bigint generated by default as identity(start with 1) primary key,
    username varchar(50) not null,
    group_id bigint not null
    );

Дополнительно:

  1. Хорошая статья о столбцах идентификаторов и серийных .
  2. PostgreSQL документация для получения дополнительной информации (Ctrl + F и поиск "AS IDENTITY").
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...