我正在创建一个包含以下表定义的表
CREATE TABLE auth(
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
role VARCHAR(64)
);
生成的uuids格式为a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11
我知道postgres也接受没有连字符的uuids。我们如何指定自动生成的uuids中没有连字符?
答案 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
时,会加连字符。