За релационна база данни като 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 стойност и започване на изкачването отначало. Много повече информация можете да намерите в официалната документация.