主要观点:
- 在 Postgres 中常用
random()
函数生成随机数,但它是伪随机数生成器,不适合需要真正随机性的情况,Postgres 提供了通过pgcrypto
扩展获取安全随机数的方式。 - 引入
pgcrypto
数据库可能没问题,但测试 Postgres 17 RC 版本时,构建pgcrypto
依赖 OpenSSL 很困难,作者反对使用 Postgres 扩展。 - Postgres 内部有
pg_strong_random.c
模块可生成安全随机数,无需依赖 OpenSSL 或pgcrypto
,但未提供给用户。 - 可通过
gen_random_uuid()
函数获取安全随机数据生成 V4 UUID,利用其生成 ULID 所需的 10 字节随机数,避免依赖pgcrypto
扩展。
关键信息:
random()
是伪随机数生成器。pgcrypto
需通过pgcrypto
扩展获取gen_random_bytes
。- 测试 Postgres 17 RC 版本时构建
pgcrypto
困难。 pg_strong_random()
可生成安全随机数。gen_random_uuid()
生成 V4 UUID 包含安全随机数据。
重要细节:
- 示例代码中通过
gen_random_uuid()
生成随机 UUID 并提取前后 5 字节得到 10 字节随机数用于 ULID。 - 改变
gen_ulid()
实现以避免依赖pgcrypto
扩展。 - 希望尽快在核心中实现 V7 UUID 以摆脱此技巧。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。