首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果数据库是Postgresql和db_index=True,则Django字段中的字符串可以有多大?

如果数据库是Postgresql和db_index=True,则Django字段中的字符串可以有多大?
EN

Stack Overflow用户
提问于 2014-01-29 10:37:19
回答 1查看 343关注 0票数 0

我正在做一个Django网站,它有一个PostgreSQL数据库,我的一个模型有一个“描述”字段,我想给出一个索引。是否有可添加到该列的最大字符串大小?

Django关于PostgreSQL指数的文献使它看起来似乎没有限制,因为您可以为不定义max_lenth的TextFields创建索引。然而,我发现了这篇关于btree列大小错误的文章,这使我认为2713 /4-4= 674.25是最适合的UTF-8字符。有人能为我指出这方面的文档或分享尝试将索引放在Django TextFields上的经验吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-29 10:58:32

确实是有限度的,但并不是很小。

错误:索引行需要9400字节,最大大小为8191

要触发这一点:

代码语言:javascript
运行
复制
CREATE TABLE bigtext(x text);

CREATE INDEX bigtext_x ON bigtext(x);

 INSERT INTO bigtext(x) SELECT repeat('x', 819200);

考虑到这个错误,您可能会认为这是失败的:

代码语言:javascript
运行
复制
INSERT INTO bigtext(x) SELECT repeat('x', 8192);

但由于压缩,它不会;你可以在一个额外的零点上,它将仍然适合。

较小的,较少的重复,因此较少的可压缩文本将适应较少之前,超过一页和失败。理论上,如果您有完全随机的垃圾,那么应该只有8191个字节,但实际上,在utf-8db上,它仍然会更多一些,因为utf-8不允许完全随机;不过,可能在8191个完全随机的utf-8字符附近。

由于这个原因,您不能有一个简单的CHECK约束,它不像“字符数”那么简单。

您可能会发现pg_column_size(...)很有用;它告诉您数据的磁盘上压缩大小。不过,在CHECK约束中,它不会对您有所帮助,因为它总是显示完全未压缩大小的unTOASTed数据。

PostgreSQL文档可以更好地描述这个限制(或者根本没有)。

对于更大的字段,您可以索引left n字节,或者使用像tsearch2这样的工具来执行全文搜索。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21428451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档