gpt4 book ai didi

sql - 如何截断列以创建索引?

转载 作者:行者123 更新时间:2023-11-29 12:13:07 27 4
gpt4 key购买 nike

我在 postgresql 中有下表:

database=# \d dic
Table "public.dic"
Column | Type | Modifiers
-------------+-------------------------+-----------
id | bigint |
stringvalue | character varying(2712) |

database=# create index idStringvalue on dic(id,stringvalue);
ERROR: index row size 2728 exceeds maximum 2712 for index "idstringvalue"
HINT: Values larger than 1/3 of a buffer page cannot be indexed.
Consider a function index of an MD5 hash of the value, or use full text indexing.

我不知道为什么当stringvalue的大小是2712时会出现错误。

我想截断 dic 中导致上述错误的所有字符串值。但是,我不知道该怎么做。有人可以帮我解决这个问题吗?

我什至可以删除导致此错误的行。有什么方法可以这样做吗?

最佳答案

您的列可能包含多字节数据:虽然 varchar(2712) 处理得很好,但索引算法将计算 c 字符串长度是有道理的,因为内存考虑是后者担心的.

理论上,将限制除以四不会出错,即为列使用无界 varchar,并索引前 600 个左右的字符,例如:

create index on dic((left(stringvalue, 600)));

不过,这确实提出了一个问题,即您是否真的需要为如此大的内容编制索引,因为这样做的值(value)主要在于排序。 Postgres(正确地)建议您使用值的 md5(如果您只对严格相等感兴趣)或全文搜索(如果您对模糊匹配感兴趣)。

关于sql - 如何截断列以创建索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20725671/

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