【问题标题】:size/length limitation of array type in PostgreSQLPostgreSQL 中数组类型的大小/长度限制
【发布时间】:2015-04-21 07:46:03
【问题描述】:

我正在开发一个使用 PostgreSQL 作为数据库的 Web 项目。我正在尝试构建一个包含向量空间模型表的网络数据库结构。 我创建了一个属性为termsdocId[] 的表,其中docId 是该术语的文档ID。 docId 的类型是 integer[]。因此,我可以在文档列表中输入一个术语,该文档列表将该术语包含在一个数组中。但是 docId 的 term 数组可能包含很多条目。

所以我的问题是:Postgres 中一维数组的最大大小是多少?

【问题讨论】:

    标签: arrays postgresql


    【解决方案1】:

    Postgres 数组上有 no size limit。行或列的大小必须有限制,但这会涉及数百万个条目。

    将术语与文档相关联的更多 SQL 方法是一对多关系。这是这样实现的:

    table term: columns term_id, term, document_id
    table document: columns document_id, summary, ...
    

    term 表中的document_id 列称为外键。

    【讨论】:

    • “行或列的大小必须有限制,但这会在数百万个条目中运行”——如果你能原谅一个令人震惊的“实际上很好”:每个表有 1,600 列的硬性限制,并且该限制包括已删除的列:stackoverflow.com/a/12612255/71522
    • 其实PostgreSQL有一个max field length of 1GB。因此,如果任何术语具有超过 1GB 的“document_ids”(-> 一对多),它将超过 PostgreSQL 的容量。
    【解决方案2】:

    我没有发现数组中的元素数量有任何限制,但是有字段大小。 PostgreSQL 中字段的最大大小为 1GB,因此数组中大约有 268435456 个元素。请注意,索引此类数组或搜索它可能是无用的。

    【讨论】:

    • 你能解释一下这是为什么吗?为什么索引对这样的数组没用?谢谢...
    • @cinfis 因为该索引会很大。事实上,它可能会比数据库的其余部分更大。
    • 我在这里试图找出用作函数参数和 = ANY 子句的数组大小的实际限制:如果我的函数接受用于从表中选择行的 id 数组,是如果数组有数千个,它会非常慢吗?成千上万? ...我可能应该尝试构建一个临时表或其他东西,而不仅仅是传递一个 id 数组...
    猜你喜欢
    • 1970-01-01
    • 2017-01-22
    • 2022-01-03
    • 2021-01-17
    • 1970-01-01
    • 2021-12-17
    • 2016-10-26
    • 1970-01-01
    • 2019-08-19
    相关资源
    最近更新 更多