如何解决表达式中带有 sha() 函数的 Postgres 索引
postgres 中的 sha
functions 只接受 bytea
作为输入类型。
sha512 ( bytea ) → bytea
Computes the SHA-512 hash of the binary string.
sha512('abc'::bytea) → \xddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f
问题在于,如果输入文本包含反斜杠(错误:'abc'::bytea
),则文档 (invalid input Syntax for type bytea
) 中所示的强制转换不起作用。我能找到的将这样的字符串转换为 bytea
的唯一方法是这个函数:
convert_to ( string text,dest_encoding name ) → bytea
Converts a text string (in the database encoding) to a binary string encoded in encoding dest_encoding (see Section 23.3.4 for available conversions).
convert_to('some_text','UTF8') → \x736f6d655f74657874
但是这个函数不是一成不变的,因此它不能用在这样的UNIQUE INDEX
中:
CREATE UNIQUE INDEX index_name ON public.table
USING btree
(
(md5(message)),-- works
(sha512(convert_to(message,'UTF8'))) -- not immutable
);
问题:如何在索引表达式中使用 sha
函数?我不想使用 md5
。
解决方法
双反斜杠:
CREATE UNIQUE INDEX index_name ON public.table
USING btree
(
(sha512(replace(message,'\','\\')::bytea))
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。