功能uuid_hash
和uuid_hash_extended
探索 postgresql 我发现了 2 个看起来很有趣的函数:
SELECT
p.proname ,
obj_description(p.oid) AS func_desc,
pg_get_function_arguments(p.oid) AS args_def,
string_to_array(pg_get_function_identity_arguments(p.oid), ','::text) AS args,
pg_get_function_result(p.oid) AS rettype
FROM
pg_catalog.pg_proc P
WHERE
proname ~~ 'uuid_hash%'
名字 | func_desc | args_def | 参数 | 重新输入 |
---|---|---|---|---|
uuid_hash | 哈希 | uuid | {uuid} | 整数 |
uuid_hash_extended | 哈希 | uuid,大整数 | {uuid,大整数} | 大整数 |
让我们尝试使用它们:
SELECT
uuid_hash(uuid_nil()),
uuid_hash_extended(uuid_nil(), 0),
uuid_hash(MD5('hello')::uuid),
uuid_hash_extended(MD5('hello')::uuid, 0);
uuid_hash | uuid_hash_extended | uuid_hash | uuid_hash_extended |
---|---|---|---|
1353656403 | -6859010066814654381 | 1620818621 | -4122998508949357891 |
DB Feedle:https ://www.db-fiddle.com/f/8CG8HaFn6D2mLKLk3LTwx2/0
嗯。看起来很有趣,也许有可能的用途。
切换我注意到uuid_hash_extended
出现在 PostgreSQL 11 中的 postgresql 版本。
查看 postgresql 文档 - 我什么也没找到。
网络搜索 - 也没有。
问题
这些功能的目的是什么?
它们可以用来做什么?
更新
A. 答案https://dba.stackexchange.com/a/295517/82983被接受。函数的源码看起来很简单
它们用于
hash
索引方法。正如源代码中明确提到的:可以通过 pg_ampproc/pg_opclass/pg_opfamily 系统目录跟踪依赖关系,但这与注释相比并不明显。
由于它们没有记录供用户直接调用,PostgreSQL 开发人员社区可能会决定在新的主要版本中更改/替换/删除这些功能。