gpt4 book ai didi

postgresql - 表达式中带有 sha() 函数的 Postgres 索引

转载 作者:行者123 更新时间:2023-12-04 07:23:22 28 4
gpt4 key购买 nike

sha functions在 postgres 中只需要 bytea作为输入类型。

sha512 ( bytea ) → bytea
Computes the SHA-512 hash of the binary string.
sha512('abc'::bytea) → \xddaf35a193617abacc417349ae204131​12e6fa4e89a97ea20a9eeee64b55d39a​2192992a274fc1a836ba3c23a3feebbd​454d4423643ce80e2a9ac94fa54ca49f
问题是像文档( '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))
);

关于postgresql - 表达式中带有 sha() 函数的 Postgres 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68364796/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com