pgAdmin 4 | Первичный ключ автоинкремент — efim360.ru

pgAdmin 4 | Первичный ключ автоинкремент

Когда мы пытаемся создать таблицу из графического интерфейса pgAdmin 4, то в большинстве случаев мы хотим иметь столбец с уникальным идентификатором строки, который создаётся автоматически и увеличивается на единицу при каждой новой добавленной записи самостоятельно. Как это сделать?

Решение

Предлагаю создать простую таблицу с двумя столбцами:

  1. Первый называется "id"
  2. Второй называется "qwe"

 

И теперь нам нужно добраться до наших таблиц:

Подключаем сервер в интерфейсе pgAdmin 4

Открываем нужную базу данных

Открываем раздел "Schemas"

Открываем раздел "public"

Пролистываем до раздела "Tables"

Выделяем раздел "Tables" левой кнопкой мыши

Нажимаем правую клавишу мыши над разделом "Tables"

В выпадающем списке выбираем пункт "Create" (Создать)

Выпадет ещё один список с одним элементом "Table..." (Таблица...)

Создание таблицы в интерфейсе pgAdmin 4
Создание таблицы в интерфейсе pgAdmin 4

Откроется диалоговое окно "CreateTable"

Диалоговое окно "CreateTable" в pgAdmin 4
Диалоговое окно "CreateTable" в pgAdmin 4

Предлагаю назвать таблицу "R77"


 

Переходим на вкладку "Columns"

Вкладка "Columns", кнопка добавления столбца в новую таблицу в интерфейсе pgAdmin 4
Вкладка "Columns", кнопка добавления столбца в новую таблицу в интерфейсе pgAdmin 4

Дважды нажимаем на кнопку добавления нового столбца в таблицу в интерфейсе pgAdmin 4. Кнопка оформлена в виде значка "+" (ПЛЮС)

Добавили два столбца в новую таблицу в интерфейсе pgAdmin 4
Добавили два столбца в новую таблицу в интерфейсе pgAdmin 4

Вводим имена для столбцов сверху вниз.

  1. "id"
  2. "qwe"
Ввели имена "id" и "qwe" для двух столбцов таблицы в pgAdmin 4
Ввели имена "id" и "qwe" для двух столбцов таблицы в pgAdmin 4

Теперь необходимо заполнить типы данных для каждого столбца нашей таблицы

Для "id" мы выбираем "bigint"

Для "qwe" мы выбираем "text"

Добавили два типа данных "bigint" и "text" для столбцов таблицы в pgAdmin 4
Добавили два типа данных "bigint" и "text" для столбцов таблицы в pgAdmin 4

Мы выбрали тип данных "bigint". Это целое число в большом диапазоне от -9223372036854775808 до 9223372036854775807. Оно занимает размер в 8 байт. Вы также можете выбрать "smallint" (от -32768 до +32767) или "integer" (от -2147483648 до +2147483647). Выбор зависит от задачи. В нашем примере можно использовать любой. Мы просто тренируемся.

Теперь нам нужно настроить конфигурацию столбца "id". Для этого нажимаем на символ карандаша слева. При наведении всплывает информация "Edit row"

Редактируем столбец "id" в таблице в интерфейсе pgAdmin 4
Редактируем столбец "id" в таблице в интерфейсе pgAdmin 4

Нам нужно указать, что столбец "id" в таблице "R77" является первичным ключом. Для этого переключаем тумблер "Primary key?", чтобы он подсветился синим цветом.

Объявили столбец "id" первичным ключом таблицы в интерфейсе pgAdmin 4
Объявили столбец "id" первичным ключом таблицы в интерфейсе pgAdmin 4

Теперь нужно перейти на вкладку "Constraints" для нашего столбца "id" и настроить для него "Ограничения".

Перешли на вкладку "Constraints" для настройки "Ограничений" столбца "id" с типом данных "bigint"
Перешли на вкладку "Constraints" для настройки "Ограничений" столбца "id" с типом данных "bigint"

В этом блоке нам нужно включить "Type" в значение "Identity", чтобы раскрыть дополнительные настройки столбца.

Выбрали для ограничений столбца тип "Identity" в интерфейсе pgAdmin 4
Выбрали для ограничений столбца тип "Identity" в интерфейсе pgAdmin 4

Нам раскрывается список с полями:

  • Identity
  • Increment
  • Start
  • Minimum
  • Maximum
  • Cache
  • Cycled
"Type" - типы столбцов "идентификации" в PostgreSQL.
"Type" - типы столбцов "идентификации" в PostgreSQL.

В нашем случае мы выбираем поле "Identity" в значение "ALWAYS".

В поле "Increment" ставим значение "1". Значение будет увеличиваться на единицу с каждой строкой автоматически.

В поле "Start" ставим значение "1" т. к. нас интересуют только целые положительные значения в автоинкременте.

Остальные поля нас не интересуют.

Заполнили столбец "id" для автоинкремента в таблице в интерфейсе pgAdmin 4
Заполнили столбец "id" для автоинкремента в таблице в интерфейсе pgAdmin 4

После ввода всех необходимых данных нам нужно сохранить изменения. Для этого нажимаем на синюю кнопку "Save" со значком дискеты.

С этого момента pgAdmin 4 формирует SQL-запрос и посылает его в СУБД PostgreSQL, которая установлена на сервере (или виртуальной машине)

-- Table: public.R77

 

-- DROP TABLE IF EXISTS public."R77";

 

CREATE TABLE IF NOT EXISTS public."R77"

(

    id bigint NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 ),

    qwe text COLLATE pg_catalog."default",

    CONSTRAINT "R77_pkey" PRIMARY KEY (id)

)

WITH (

    OIDS = FALSE

)

TABLESPACE pg_default;

 

ALTER TABLE IF EXISTS public."R77"

    OWNER to postgres;

 

В вашем случае таблицы будут называться по другому. Это просто пример запроса.

 

Тест работы автоинкремента в таблице

Сейчас таблица пуста.

Пустая таблица со столбцом автоинкрементом первичным ключом в pgAdmin 4
Пустая таблица со столбцом автоинкрементом первичным ключом в pgAdmin 4

Давайте добавим данные в три ячейки столбца "qwe"

Добавили данные в три ячейки столбца "qwe" в таблице в pgAdmin 4
Добавили данные в три ячейки столбца "qwe" в таблице в pgAdmin 4

Обратите внимание, что графический интерфейс pgAdmin 4 сейчас нам показывает ячейки столбца "id" со значениями "null".

Это нужно понимать как "НЕСОХРАНЁННЫЕ ДАННЫЕ". То есть мы пока не сохранили введённые изменения в таблицу.

Сохраняем результат. Для этого нажимаем на значёк "цилиндра с дискетой" или клавишу F6.

Сохранение изменений в таблице с автоинкрементом в pgAdmin 4
Сохранение изменений в таблице с автоинкрементом в pgAdmin 4

После этого pgAdmin 4 отправит 5 SQL-запросов на сервер СУБД.

BEGIN;

INSERT INTO public."R77" (qwe) VALUES ('qqq'::text) returning id;

INSERT INTO public."R77" (qwe) VALUES ('www'::text) returning id;

INSERT INTO public."R77" (qwe) VALUES ('eee'::text) returning id;

COMMIT;

И когда операция будет завершена, тогда мы увидим в графическом интерфейсе наши заветные автоувеличенные идентификаторы строк, которые будут являться первичными ключами.

5 SQL-запросов на сервер СУБД из pgAdmin 4
5 SQL-запросов на сервер СУБД из pgAdmin 4
Автоматически заполненные ячейки таблицы первичного ключа с авто-увеличением на 1 в интерфейсе pgAdmin 4
Автоматически заполненные ячейки таблицы первичного ключа с авто-увеличением на 1 в интерфейсе pgAdmin 4

Задача выполнена! Автоинкремент работает

 

Дополнительная информация

В postgresql существуют специальные типы данных:

  • bigserial (псевдоним serial8) - восьмибайтное целое с автоувеличением
  • serial (псевдоним serial4) - четырёхбайтное целое с автоувеличением
  • smallserial (serial2) - двухбайтное целое с автоувеличением

 

 

Информационные ссылки

Стандарт "PostgreSQL" - Раздел "Числовые типы" - https://postgrespro.ru/docs/postgresql/14/datatype-numeric

Стандарт "PostgreSQL" - Раздел "columns" (Столбцы) - https://postgrespro.ru/docs/postgresql/14/infoschema-columns

Поделись записью