Identity column

Ushbu qo'llanmada siz jadval uchun PostgreSQL identifikator ustunini yaratish uchun GENERATED AS IDENTITY cheklovidan qanday foydalanishni o'rganasiz.

PostgreSQL 10-versiyasida identifikator sifatida yaratilgan yangi cheklov joriy etildi, bu sizga avtomatik ravishda ustunga noyob raqam belgilash imkonini beradi.

GENERATED AS IDENTITY cheklovi eski SERIAL ustunining SQL standartiga mos variantidir.

Quyida GENERATED AS IDENTITY cheklovining sintaksisi tasvirlangan:

column_name type GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY[ ( sequence_option ) ]

Ushbu sintaksisda:

  • Turi SMALLINT, INT yoki BIGINT bo'lishi mumkin.

  • GENERATED ALWAYS PostgreSQL-ga har doim identifikatsiya ustuni uchun qiymat yaratishni buyuradi. Agar siz qiymatlarni GENERATED ALWAYS AS IDENTITY ustuniga kiritishga (yoki yangilashga) harakat qilsangiz, PostgreSQL xatolik chiqaradi.

  • GENERATED BY BY DEFAULT shuningdek, PostgreSQL-ga identifikatsiya ustuni uchun qiymat yaratishni buyuradi. Biroq, agar siz kiritish yoki yangilash uchun qiymat bersangiz, PostgreSQL tizim tomonidan yaratilgan qiymatdan foydalanish o'rniga identifikatsiya ustuniga kiritish uchun ushbu qiymatdan foydalanadi.

PostgreSQL sizga jadvalda bir nechta identifikatsiya ustuniga ega bo'lish imkonini beradi. SERIAL singari, GENERATED AS IDENTITY cheklovi ham SEQUENCE ob'ektini ichki sifatida ishlatadi.

PostgreSQL identifikatsiya ustuniga misollar

A. GENERATED ALWAYS

Birinchidan, identifikatsiya ustuni sifatida color_id bilan rang nomli jadval yarating:

CREATE TABLE color (
    color_id INT GENERATED ALWAYS AS IDENTITY,
    color_name VARCHAR NOT NULL
);

Ikkinchidan, colot jadvaliga yangi qator qo'shing:

color_id ustunida GENERATED AS IDENTITY cheklovi mavjud bo'lganligi sababli, PostgreSQL quyidagi so'rovda ko'rsatilganidek, uning qiymatini yaratadi:

output

Uchinchidan, color_id va color_name ustunlari uchun qiymatlarni kiritish orqali yangi qator qo'shing:

PostgreSQL quyidagi xatoni chiqardi:

Xatoni tuzatish uchun siz OVERRIDING SYSTEM VALUE bandidan quyidagi tarzda foydalanishingiz mumkin:

output

Yoki uning o'rniga GENERATED BY BY DEFAULT AS IDENTITY dan foydalaning.

B. GENERATED BY DEFAULT AS IDENTITY

Birinchidan, color jadvalini o'chiring va uni qayta yarating. Bu safar biz GENERATED BY DEFAULT AS IDENTITY dan foydalanamiz:

Ikkinchidan, color jadvaliga qator qo'shing:

Kutilganidek ishlaydi.

Uchinchidan, color_id ustuni qiymatiga ega boshqa qatorni kiriting:

GENERATED ALWAYS AS IDENTITY cheklovidan foydalanadigan oldingi misoldan farqli o'laroq, yuqoridagi bayonot juda yaxshi ishlaydi.

C. Ketma-ket variantlarga misol

GENERATED AS IDENTITY cheklovi SEQUENCE obyektidan foydalanganligi sababli tizim tomonidan yaratilgan qiymatlar uchun ketma-ketlik parametrlarini belgilashingiz mumkin.

Masalan, siz boshlang'ich qiymat va o'sishni quyidagicha belgilashingiz mumkin:

Ushbu misolda color_id ustuni uchun tizim tomonidan yaratilgan qiymat 10 dan boshlanadi va o'sish qiymati ham 10 ga teng.

Birinchidan, color jadvaliga yangi qator qo'shing:

color_id ustunining boshlang'ich qiymati quyida ko'rsatilgandek o'nga teng:

output

Ikkinchidan, color jadvaliga boshqa qatorni kiriting:

O'sish opsiyasi tufayli ikkinchi qatorning color_id qiymati 20 ga teng.

output

Mavjud jadvalga identifikatsiya ustunini qo'shish

ALTER TABLE iborasining quyidagi shaklidan foydalanib, mavjud jadvalga identifikatsiya ustunlarini qo'shishingiz mumkin:

Keling, quyidagi misolni ko'rib chiqaylik. Birinchidan, shape nomli yangi jadval yarating:

Ikkinchidan, shape_id ustunini identifikatsiya ustuniga o'zgartiring:

E'tibor bering, shape_id identifikatsiya ustuniga o'zgartirilishi uchun NOT NULL chekloviga ega bo'lishi kerak. Aks holda, siz quyidagi xatolikni olasiz:

Quyidagi buyruq psql asbobidagi shape jadvalini tavsiflaydi:

U biz kutgan quyidagi natijani qaytaradi: output

Identifikatsiya ustunini o'zgartirish

Mavjud identifikatsiya ustunining xususiyatlarini quyidagi ALTER TABLE iborasidan foydalanib o'zgartirishingiz mumkin:

Misol uchun, quyidagi bayonot shape jadvalining shape_id ustunini GENERATED BY BY DEFAULT ga o'zgartiradi:

Quyidagi buyruq psql asbobidagi shakllar jadvalining tuzilishini tavsiflaydi:

output

Natijadan ko'rinib turibdiki, shape_id ustuni GENERATED ALWAYS dan GENERATED BY BY DEFAULT ga o'zgartirildi.

GENERATED AS IDENTITY cheklovini olib tashlash

Quyidagi bayonot mavjud jadvaldan GENERATED AS IDENTITY cheklovini olib tashlaydi:

Masalan, siz shape jadvalining shape_id ustunidan GENERATED AS IDENTITY cheklash ustunini quyidagicha olib tashlashingiz mumkin:

Ushbu qo'llanmada siz PostgreSQL identifikator ustunidan qanday foydalanishni va uni GENERATED AS IDENTITY cheklovi yordamida qanday boshqarishni o'rgandingiz.

© postgresqltutorial.com

Last updated

Was this helpful?