PostgreSQL不使用扩展,生成随机int8值,生成均匀分布的随机int8值
PostgreSQL使用扩展插件pgcrypto,生成随机int8值
在PostgreSQL中,可以使用 pgcrypto
扩展提供的函数 gen_random_uuid()
生成随机的UUID(Universally Unique Identifier),其中包含8字节随机整数(int8值),如下所示:
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
SELECT substring(gen_random_uuid()::text from 1 for 16)::bit(64)::bigint;
上述SQL语句使用 gen_random_uuid()
函数生成随机UUID,并将其转换为字符串类型。然后,使用 substring()
函数从字符串中提取前16个字符,并将其转换为 bit(64)
类型。最后,使用 bigint
类型进行值的转换,得到一个随机的8字节整数(int8值)。
PostgreSQL不使用扩展,生成随机int8值
不使用 pgcrypto
扩展,可以使用 Postgres 内置的 random()
函数生成随机数,并将其转换为您需要的整数类型。以下是一个示例 SQL 语句,可以生成一个随机的8字节整数:
SELECT floor(random() * 9223372036854775807)::bigint;
在上述语句中,random()
函数返回一个 [0, 1) 之间的浮点数,将其乘以 9223372036854775807(2^63 - 1),得到一个 [0, 9223372036854775807) 之间的浮点数。然后使用 floor()
函数将其转换为一个整数,并使用 ::bigint
将其转换为一个64位的整数类型(bigint)。
请注意,由于 random()
函数返回浮点数,因此生成的整数并不是均匀分布的。如果需要更好的随机性能,请考虑使用 pgcrypto
扩展中提供的随机数生成函数。
PostgreSQL不使用扩展,生成均匀分布的随机int8值
如果需要生成均匀分布的随机int8值,可以使用 Postgres 内置的 random()
函数和位运算符来生成。以下是一个示例 SQL 语句,可以生成一个均匀分布的随机8字节整数:
SELECT trunc(random()*pow(2,64)::numeric)::bigint^trunc(random()*pow(2,64)::numeric)::bigint;
在上述语句中,我们使用 pow()
函数计算出一个64位无符号整数的最大值(2的64次方),然后将该值转换为 numeric
类型。接下来,我们使用 random()
函数两次产生两个0到1之间的随机数,并将它们乘以最大值,得到两个潜在的64位无符号整数值。使用 trunc()
函数将它们转换为整数,并分别将它们按位异或,得到一个均匀分布的随机8字节整数。
值得注意的是,这种方法也不是完美的均匀分布,但已经足够用于大多数情况。如果需要更高质量的随机整数,请使用 pgcrypto
扩展中提供的随机数生成函数。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfkfgke
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01