Ето работещо решение за постигане на нещо близко до това, което искате:
CREATE TABLE foo (
ts TIMESTAMP WITH TIME ZONE,
uuid VARCHAR DEFAULT REPLACE(uuid_generate_v4()::text, '-', '' )
);
INSERT INTO foo ( ts ) VALUES ( now() );
НО (и това е голямо но ) тук преобразуваме uuid
към string
това означава, че самият индекс ще бъде много по-скъп от число или реален uuid
.
В тази статия можете да намерите добро обяснение:
https://tomharrisonjr.com/uuid-or-guid-as-primary-keys-be-careful-7b2aa3dcb439
Доколкото знам, uuid
на Postgres използва тирета, дори ако се опитате да ги премахнете:
CREATE TABLE foo (
ts TIMESTAMP WITH TIME ZONE,
queue UUID DEFAULT REPLACE(uuid_generate_v4()::text, '-', '' )::uuid,
);
INSERT INTO foo ( ts ) VALUES ( now() );
Примерът по-горе работи добре в Postgres 9.6, но когато прехвърляме обратно към uuid
тирета се добавят обратно.