我正在创建一个具有以下表定义的表
CREATE TABLE auth(
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
role VARCHAR(64)
);
Run Code Online (Sandbox Code Playgroud)
生成的 uuid 的形式是a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11我知道 postgres 也接受不带连字符的 uuid。我们如何指定自动生成的 uuid 中不包含连字符?
更新:
感谢 @a_horse_with_no_name 指出问题和答案都不相关,因为 Postgres 不存储带有UUID类型的连字符。
这是一个可行的解决方案,可以实现接近您要求的目标:
CREATE TABLE foo (
ts TIMESTAMP WITH TIME ZONE,
uuid VARCHAR DEFAULT REPLACE(uuid_generate_v4()::text, '-', '' )
);
INSERT INTO foo ( ts ) VALUES ( now() );
Run Code Online (Sandbox Code Playgroud)
但是(这是一个很大的但是)这里我们转换uuid为 astring这意味着索引本身将比数字或实际值昂贵得多uuid。
在本文中,您可以找到一个很好的解释:
https://tomharrisonjr.com/uuid-or-guid-as-primary-keys-be-careful-7b2aa3dcb439
据我所知,Postgresuuid使用连字符,即使您尝试删除它们:
CREATE TABLE foo (
ts TIMESTAMP WITH TIME ZONE,
queue UUID DEFAULT REPLACE(uuid_generate_v4()::text, '-', '' )::uuid,
);
INSERT INTO foo ( ts ) VALUES ( now() );
Run Code Online (Sandbox Code Playgroud)
上面的示例在 Postgres 9.6 中运行得很好,但是当我们转换回连uuid字符时,连字符会被添加回来。
| 归档时间: |
|
| 查看次数: |
8799 次 |
| 最近记录: |