如何生成没有破折号的uuids

时间:2016-11-21 16:17:22

标签: postgresql

我正在创建一个包含以下表定义的表

CREATE TABLE auth(
    id                  UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    role                VARCHAR(64)
);

生成的uuids格式为a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11我知道postgres也接受没有连字符的uuids。我们如何指定自动生成的uuids中没有连字符?

1 个答案:

答案 0 :(得分:0)

这是一个可行的解决方案,可以实现您所要求的目标:

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


据我所知,即使您尝试删除连字符,Postgres的uuid也会使用连字符:

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时,会加连字符。