主要观点:
- 在 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) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。