Postgres 10 или более поздние
serial
столбцы (см. Ниже) остаются без изменений.Но рассмотрим столбец IDENTITY
.Postgres 10 реализует эту стандартную функцию SQL.
CREATE TABLE staff (
staff_id <b>int GENERATED BY DEFAULT AS IDENTITY</b> PRIMARY KEY
, staff text NOT NULL
);
Основной синтаксис и информация в руководстве для CREATE TABLE
.
Подробное объяснение в этой записи в блоге о егоосновной автор Peter Eisentraut.
К добавить столбец IDENTITY
к существующей таблице (заполненной строками или нет):
ALTER TABLE staff ADD COLUMN staff_id int GENERATED BY DEFAULT AS IDENTITY;
Чтобы сделать его одновременно PK (таблица не может иметь PK):
ALTER TABLE staff ADD COLUMN staff_id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY;
В ранних версиях была ошибка, которая могла привести кк сообщению об ошибке вроде:
ERROR: column "staff_id" contains null values
Это было исправлено в Postgres 10.2.Детали:
Postgres 9.6 или старше
Вместо этого используйте serial
псевдо-тип данных вместо:
CREATE TABLE staff (
staff_id <b>serial</b> PRIMARY KEY,
, staff text NOT NULL
);
Он автоматически создает и присоединяет объект последовательности и устанавливает DEFAULT
в nextval()
из последовательности.Он делает все, что вам нужно.
Я также использую только строчные идентификаторы в моем примере.Облегчает вашу жизнь с Postgres.
И лучше используйте описательные имена столбцов.«id» как имя - это анти-шаблон, используемый некоторыми промежуточными программами, но вряд ли описательный.Похоже на «имя».