За релационна база данни като PostgreSQL това може да се счита за грях сред разработчиците не за да включите първичен ключ във всяка таблица. Ето защо е изключително важно да направите всичко възможно, за да добавите тази изключително важна колона с първичен ключ към всяка таблица и за щастие Postgres предоставя два метода за изпълнение на тази задача.
Използване на серийния тип данни
Безспорно най-простата и разпространена техника за добавяне на първичен ключ в Postgres е използването на SERIAL
или BIGSERIAL
типове данни при CREATING
нова маса. Както е посочено в официалната документация, SERIAL
не е истински тип данни, а е просто съкратена нотация, която казва на Postgres да създаде автоматично увеличен, уникален идентификатор за посочената колона.
По-долу ще създадем нашите прости books
таблица с подходящ SERIAL
тип данни за първичния ключ.
CREATE TABLE books (
id SERIAL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
primary_author VARCHAR(100) NULL
);
Като просто зададете нашия id
колона като SERIAL
с PRIMARY KEY
прикачен, Postgres ще се справи с цялата сложна работа зад кулисите и автоматично ще увеличи нашия id
колона с уникален първичен ключ за всеки INSERT
.
Използване на персонализирана последователност
В някои редки случаи, стандартната инкрементална природа, вградена в SERIAL
и BIGSERIAL
типовете данни може да не отговарят на вашите нужди. В тези случаи можете да изпълнявате същата функция за автоматично увеличен първичен ключ за вашата колона, като създадете персонализирана SEQUENCE
, подобно на метода, използван в по-старата версия на Oracle.
Може би ние особено обичаме четните числа, но също така изпитваме силна неприязън към всичко по-малко от 100, така че искаме само основният ни ключ да бъде увеличен с два, започвайки от 100 за всяка вмъкване. Това може да се постигне с персонализиран SEQUENCE
така:
CREATE SEQUENCE books_sequence
start 2
increment 2;
Сега, когато INSERT
нов запис в нашите books
таблица, трябва да оценим следващата стойност на нашата последователност с nextval('books_sequence')
и го използвайте като id
.
INSERT INTO books
(id, title, primary_author)
VALUES
(nextval('books_sequence'), 'The Hobbit', 'Tolkien');
SEQUENCES
може да се подправи още повече, ако желаете, с опции като minvalue
и maxvalue
разбира се, за да посочите екстремни стойности и дори CYCLE
, което позволява на последователността да се „обикаля“, след като достигне maxvalue
, връщайки се обратно към start
стойност и започване на изкачването отначало. Много повече информация можете да намерите в официалната документация.