Đây là một giải pháp hiệu quả để đạt được điều gì đó gần với những gì bạn yêu cầu:
CREATE TABLE foo (
ts TIMESTAMP WITH TIME ZONE,
uuid VARCHAR DEFAULT REPLACE(uuid_generate_v4()::text, '-', '' )
);
INSERT INTO foo ( ts ) VALUES ( now() );
NHƯNG (và nó là một lớn nhưng ) ở đây chúng tôi chuyển đổi uuid
thành một chuỗi string
điều đó có nghĩa là bản thân chỉ mục sẽ đắt hơn nhiều so với một số hoặc một uuid
thực .
Trong bài viết này, bạn có thể tìm thấy lời giải thích hay:
https://tomharrisonjr.com/uuid-or-guid-as-primary-keys-be-careful-7b2aa3dcb439
Theo như tôi biết, uuid
của Postgres sử dụng dấu gạch ngang ngay cả khi bạn cố gắng xóa chúng:
CREATE TABLE foo (
ts TIMESTAMP WITH TIME ZONE,
queue UUID DEFAULT REPLACE(uuid_generate_v4()::text, '-', '' )::uuid,
);
INSERT INTO foo ( ts ) VALUES ( now() );
Ví dụ trên hoạt động tốt trong Postgres 9.6, nhưng khi chúng tôi truyền trở lại uuid
dấu gạch nối được thêm lại.