Jawaban:
Panggil DEFAULT
ketika mendefinisikan kolom untuk memanggil salah satu fungsi uuid OSSP . Server Postgres akan secara otomatis menjalankan fungsi setiap kali sebuah baris dimasukkan.
CREATE TABLE tbl
(
pkey UUID NOT NULL DEFAULT uuid_generate_v1() ,
CONSTRAINT pkey_tbl PRIMARY KEY ( pkey )
)
Jika Anda sudah menggunakan ekstensi pgcrypto , pertimbangkan Jawaban dengan bpieck .
Sementara Postgres out-of-the-box mendukung penyimpanan nilai-nilai UUID (Universally Unique Identifier) dalam bentuk 128-bit asalnya , menghasilkan nilai-nilai UUID memerlukan plug-in. Di Postgres, sebuah plug-in dikenal sebagai extension
.
Untuk menginstal ekstensi, hubungi CREATE EXTENSION
. Untuk menghindari menginstal ulang, tambahkan IF NOT EXISTS
. Lihat posting blog saya untuk lebih jelasnya, atau lihat halaman ini di StackOverflow .
Ekstensi yang kami inginkan adalah pustaka sumber terbuka yang dibangun di C untuk bekerja dengan UUID, OSSP uuid . Sebuah membangun perpustakaan ini untuk Postgres sering dibundel dengan instalasi Postgres seperti installer grafis yang disediakan oleh Perusahaan DB atau termasuk oleh penyedia cloud seperti Amazon RDS untuk PostgreSQL .
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
Lihat dokumen ekstensi untuk melihat daftar beberapa perintah yang ditawarkan untuk menghasilkan berbagai jenis nilai UUID. Untuk mendapatkan versi asli UUID yang dibangun dari alamat MAC komputer plus waktu-tanggal saat ini plus nilai acak kecil, hubungi uuid_generate_v1()
.
SELECT uuid_generate_v1();
672124b6-9894-11e5-be38-001d42e813fe
Kemudian variasi pada tema ini dikembangkan untuk jenis-jenis UUID alternatif. Beberapa orang mungkin tidak ingin merekam alamat MAC server yang sebenarnya, misalnya, untuk masalah keamanan atau privasi. Perpanjangan Postgres menghasilkan lima jenis UUID, ditambah UUID “nihil” 00000000-0000-0000-0000-000000000000
.
Pemanggilan metode itu dapat dilakukan secara otomatis untuk menghasilkan nilai default untuk setiap baris yang baru saja dimasukkan. Saat mendefinisikan kolom, tentukan:
DEFAULT uuid_generate_v1()
Lihat perintah yang digunakan dalam definisi tabel contoh berikut.
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;
The uuid-ossp Plugin dapat menghasilkan berbagai versi 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
. Digunakan sebagai bendera untuk nilai UUID yang tidak diketahui. Dikenal sebagai UUID nihil .Untuk membandingkan jenis, lihat Pertanyaan, Versi UUID mana yang digunakan?
Jika Anda ingin tahu tentang Versi 3 & 5, lihat Pertanyaan ini, Menghasilkan UUID v5. Apa itu nama dan namespace? .
Untuk diskusi lebih lanjut, lihat Jawaban saya untuk Pertanyaan serupa dan nilai posting UUID blog saya dari JDBC ke Postgres .
getObject()
Anda juga dapat menggunakanUUID id = rs.getObject("uuid_", UUID.class);
uuid_generate_v1
atau uuid_generate_v1mc
.
Hanya tambahan kecil untuk jawaban Basil yang sangat terperinci:
Sejak saat kebanyakan menggunakan pgcrypto , bukan uuid_generate_v1()
Anda dapat menggunakan gen_random_uuid()
untuk UUID Versi 4 nilai.
Pertama, aktifkan pgcrypto di Postgres Anda.
CREATE EXTENSION "pgcrypto";
Setel DEFAULT sebuah kolom ke
DEFAULT gen_random_uuid()