PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да дефинирате първичен ключ за автоматично увеличение в PostgreSQL

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Heroku Postgres:Твърде много връзки. Как да убия тези връзки?

  2. Как да наблюдавате производителността на PostgreSQL 12 с OmniDB – част 2

  3. Postgres UTC формат на дата и епоха, инверсия на знака

  4. Как да преместя pandas DataFrame в PostgreSQL таблица?

  5. Обявяване на repmgr 2.0