postgres 10 对 varchar 使用什么哈希算法?

use*_*882 5 postgresql

如果我在 varchar 上应用哈希索引,postgres 10 将使用什么算法来哈希该值?会是MD5吗?低语3?FNV-1?我无法在任何地方找到此记录。

Lau*_*lbe 6

您可以使用以下查询找到正确的函数:

SELECT DISTINCT p.amproc
FROM pg_amproc p
   JOIN pg_opfamily f ON p.amprocfamily = f.oid
   JOIN pg_am a ON f.opfmethod = a.oid
WHERE a.amname = 'hash'
  AND p.amproclefttype = 'text'::regtype;
Run Code Online (Sandbox Code Playgroud)

该函数是hashtext,它hash_anybackend/access/hash/hashfunc.c内部调用。

该函数的注释告诉您更多信息:

SELECT DISTINCT p.amproc
FROM pg_amproc p
   JOIN pg_opfamily f ON p.amprocfamily = f.oid
   JOIN pg_am a ON f.opfmethod = a.oid
WHERE a.amname = 'hash'
  AND p.amproclefttype = 'text'::regtype;
Run Code Online (Sandbox Code Playgroud)