คำตอบ:
โทรหาDEFAULT
เมื่อกำหนดคอลัมน์เพื่อเรียกใช้ฟังก์ชันuuid OSSPอย่างใดอย่างหนึ่ง เซิร์ฟเวอร์ Postgres จะเรียกใช้ฟังก์ชันโดยอัตโนมัติทุกครั้งที่มีการแทรกแถว
CREATE TABLE tbl
(
pkey UUID NOT NULL DEFAULT uuid_generate_v1() ,
CONSTRAINT pkey_tbl PRIMARY KEY ( pkey )
)
ในขณะที่Postgres out-of-the-box รองรับการจัดเก็บค่า UUID (Universally Unique Identifier)ในรูปแบบ128 บิตดั้งเดิมการสร้างค่า UUID ต้องใช้ปลั๊กอิน ใน Postgres, plug-in extension
เป็นที่รู้จักกันในฐานะที่เป็น
CREATE EXTENSION
การติดตั้งส่วนขยายโทร IF NOT EXISTS
เพื่อหลีกเลี่ยงการติดตั้งใหม่เพิ่ม ดูโพสต์บล็อกของฉันสำหรับรายละเอียดเพิ่มเติมหรือดูหน้านี้ใน StackOverflow
นามสกุลที่เราต้องการเป็นห้องสมุดเปิดแหล่งที่มาสร้างใน C สำหรับการทำงานกับ UUIDs, OSSP uuid สร้างห้องสมุดนี้ Postgresมักจะมาพร้อมกับการติดตั้ง Postgres ดังกล่าวเป็นผู้ติดตั้งกราฟิกที่ให้บริการโดยองค์กร DBหรือรวมโดยผู้ให้บริการคลาวด์เช่นAmazon RDS สำหรับ PostgreSQL
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
ดูเอกสารของส่วนขยายเพื่อดูรายการคำสั่งหลายคำสั่งที่มีให้สำหรับการสร้างค่า UUID ประเภทต่างๆ ที่จะได้รับรุ่นเดิมของ UUID สร้างขึ้นจากคอมพิวเตอร์ที่อยู่ MACuuid_generate_v1()
บวกปัจจุบันวันที่เวลาบวกค่าสุ่มเล็กโทร
SELECT uuid_generate_v1();
672124b6-9894-11e5-be38-001d42e813fe
ชุดรูปแบบต่อมาของชุดรูปแบบนี้ได้รับการพัฒนาสำหรับ UUID ชนิดอื่น บางคนอาจไม่ต้องการบันทึกที่อยู่ MAC ที่แท้จริงของเซิร์ฟเวอร์ตัวอย่างเช่นเพื่อความปลอดภัยหรือความเป็นส่วนตัว นามสกุล Postgres สร้างห้าชนิดของ UUIDs บวก“ศูนย์” 00000000-0000-0000-0000-000000000000
UUID
การเรียกเมธอดนั้นสามารถดำเนินการโดยอัตโนมัติเพื่อสร้างค่าเริ่มต้นสำหรับแถวที่แทรกใหม่ เมื่อกำหนดคอลัมน์ให้ระบุ:
DEFAULT uuid_generate_v1()
ดูคำสั่งที่ใช้ในคำนิยามตารางตัวอย่างต่อไปนี้
CREATE TABLE public.pet_
(
species_ text NOT NULL,
name_ text NOT NULL,
date_of_birth_ text NOT NULL,
uuid_ uuid NOT NULL DEFAULT uuid_generate_v1(), -- <====
CONSTRAINT pet_pkey_ PRIMARY KEY (uuid_)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.pet_
OWNER TO postgres;
uuid-osspปลั๊กอินสามารถสร้างรุ่นต่างๆของ UUID
uuid_generate_v1()
uuid_generate_v1mc()
uuid_generate_v3( namespace uuid, name text )
uuid_generate_v4()
uuid_generate_v5( namespace uuid, name text )
uuid_nil()
00000000-0000-0000-0000-000000000000
เป็นกรณีพิเศษทุกบิตตั้งค่าเป็นศูนย์ ใช้เป็นแฟล็กสำหรับค่า UUID ที่ไม่รู้จัก ที่รู้จักกันเป็นUUID ศูนย์ในการเปรียบเทียบประเภทดูคำถามรุ่น UUID ที่จะใช้
หากคุณสงสัยเกี่ยวกับรุ่น 3 และ 5 โปรดดูคำถามนี้การสร้าง v5 UUID ชื่อและเนมสเปซคืออะไร? .
สำหรับการอภิปรายเพิ่มเติมโปรดดูคำตอบของฉันกับคำถามที่คล้ายกันและโพสต์บล็อกของฉันค่า UUID จาก JDBC เพื่อ Postgres
getObject()
คุณสามารถใช้UUID id = rs.getObject("uuid_", UUID.class);
uuid_generate_v1
uuid_generate_v1mc
เป็นเพียงคำตอบที่ละเอียดอ่อนของ Basil เพียงเล็กน้อย:
เนื่องจากปัจจุบันส่วนใหญ่ใช้pgcryptoแทนคุณuuid_generate_v1()
สามารถใช้gen_random_uuid()
สำหรับค่าUUID เวอร์ชัน 4
ก่อนอื่นให้เปิดใช้งานpgcryptoใน Postgres ของคุณ
CREATE EXTENSION "pgcrypto";
เพียงแค่ตั้งค่าเริ่มต้นของคอลัมน์เป็น
DEFAULT gen_random_uuid()