我在迁移中看到过这个
enable_extension 'uuid-ossp'
据我所知,uuid是一种基于某些RFC的长唯一字符串,这使得db(在本例中为pg)可以将该列类型设为uuid。
我的问题是 - 为什么需要这种类型的列而不只是一个字符串列? 它是用来替换常规的整数id列,并将uuid作为id吗?
使用uuid作为id是否有优势,而不是只有一个包含uuid的字符串类型列?
我在迁移中看到过这个
enable_extension 'uuid-ossp'
使用uuid
类型并不需要安装该扩展。相较于文本类型,使用UUID类型有两个优势。第一个是自动约束。
select 'a'::uuid;
ERROR: invalid input syntax for uuid: "a"
第二个问题是存储空间。UUID仅使用16字节,而十六进制表示需要33个字节:
select
pg_column_size('0123456789abcdef0123456789abcdef'),
pg_column_size('0123456789abcdef0123456789abcdef'::uuid)
;
pg_column_size | pg_column_size
----------------+----------------
33 | 16
uuid-ossp
扩展只是添加了生成UUID
的函数。
uuid-ossp
是Postgres的插件,用于生成UUID值。请参见:在Postgres中生成UUID以进行插入语句?和Postgres中UUID列的默认值。 - Basil Bourque