You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL是否默认支持Murmur3哈希函数?如何为UUID生成该哈希?

PostgreSQL中Murmur3哈希函数的使用方案

1. PostgreSQL默认是否提供Murmur3哈希函数?

PostgreSQL默认不附带Murmur3哈希函数,官方核心功能集里没有包含该算法的实现。

2. 为UUID生成Murmur3哈希的可行方案

方案一:使用第三方社区扩展

社区维护的pg_murmur3扩展专门实现了Murmur3哈希功能,安装后可直接调用。安装完成后执行以下命令启用扩展:

CREATE EXTENSION pg_murmur3;

之后即可直接对UUID生成Murmur3哈希(将UUID转为文本后传入函数):

SELECT murmur3_32('your-uuid-here'::text);
-- 或者直接传入UUID类型字段
SELECT murmur3_32(uuid_column::text) FROM your_table;

方案二:通过PL语言自定义函数

如果无法安装第三方扩展,可以借助PL/Python或PL/Perl等过程语言,利用对应语言的Murmur3库实现自定义函数:

PL/Python实现

首先确保已启用plpython3u扩展,并在服务器上安装Python的mmh3库:

CREATE EXTENSION plpython3u;

然后创建自定义函数:

CREATE OR REPLACE FUNCTION murmur3_uuid(uuid_val uuid)
RETURNS integer AS $$
import mmh3
return mmh3.hash(str(uuid_val))
$$ LANGUAGE plpython3u;

调用示例:

SELECT murmur3_uuid('550e8400-e29b-41d4-a716-446655440000'::uuid);

PL/Perl实现

启用plperlu扩展,并安装Perl的Digest::MurmurHash3模块:

CREATE EXTENSION plperlu;

创建自定义函数:

CREATE OR REPLACE FUNCTION murmur3_uuid(uuid_val uuid)
RETURNS integer AS $$
use Digest::MurmurHash3 qw(murmur3_32);
return murmur3_32("$uuid_val");
$$ LANGUAGE plperlu;

方案三:纯PLpgSQL实现(不推荐)

可以将Murmur3的算法逻辑用PLpgSQL重写,但这种方式性能远低于前两种方案,仅适合极小数据量场景,代码复杂度较高,一般不建议使用。

内容的提问来源于stack exchange,提问作者Sush sush

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 14:04:55