我在迁移中看到了这个
enable_extension 'uuid-ossp'
据我所知,uuid是一个基于某些RFC的长唯一字符串,这使得db(在本例中为pg)的列类型为uuid
我的问题是 - 为什么需要这种类型的列而不仅仅是字符串列? 它是替换常规整数id列并将uuid作为id吗?
使用uuid作为id有什么好处而不是只是让字符串类型列包含一个uuid?
答案 0 :(得分:3)
我希望看到更多的人在这里说话,但我认为uuid的想法是将id列替换为更独特的id,这在你有一个分布式数据库或处理时非常有用复制。
优点:
users/1
(id),这可能会促使好奇的用户尝试users/2
以查看他是否可以访问其他人的信息,因为它的明显的参数的顺序性质)。显然,还有其他方法可以处理这个特定的问题缺点:
以下是我认为有价值的更多资源:
答案 1 :(得分:3)
没有必要安装该扩展程序以使用uuid
type。使用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
extension只会添加生成UUID
的函数。