我有一个Java应用程序,它通过将随机密码字节编码为base32(RFC4648)来生成主键的ID。
如何通过SQL脚本对PostgreSQL进行同样的操作?
gen_random_bytes
似乎可以完成生成随机字节的工作,但是似乎没有可用的方法将它们编码为base32。
答案 0 :(得分:2)
几年前,我搜索了这个确切的问题,并最终构建了一个带有函数的纯plpgsql模式,并认为如果有人遇到它,我会把它留在这里。
此视频和RFC的信用 https://www.youtube.com/watch?v=Va8FLD-iuTg https://tools.ietf.org/html/rfc4648
这是扩展名https://github.com/pyramation/base32/blob/master/packages/base32/sql/launchql-base32--0.0.1.sql
一旦安装,就可以完成
select base32.encode('foo');
-- MZXW6===
select base32.decode('MZXW6===');
-- foo
答案 1 :(得分:-1)
当前Postgres的encode
函数不支持Base32:
将二进制数据编码为文本表示形式。支持的格式 分别是:base64,hex,escape。转义转换零字节和高位设置 字节到八进制序列(\ nnn),并将反斜杠加倍。
https://www.postgresql.org/docs/11/functions-string.html
但是有一些针对此功能的外部扩展。