PostgreSQL:在postgreSQL数据库中可以存储的最大表数是多少?

24

问题1: 数据库中最多可以存储多少张表?

问题2: 视图中最多可以 union 多少张表?

3个回答

28

问题1:在文档中没有明确的限制。实际上,一些操作会随着表数量的增加变为O(n);当数据库中有成千上万个表时,预计规划时间会增加,并且会出现自动清理等问题。

问题2:这要看查询的情况。通常,大型联合查询是不好的选择。表继承会稍微好一些,但如果你使用constraint_exclusion,则规划时间会大大增加。

这两个问题都暗示了你的设计存在潜在问题。你不应该需要大量的表和庞大的联合查询。

根据其他答案中的评论,你真正需要创建几个表。你似乎想要为每个电话号码创建一个表,这是没有意义的,并且在其上创建视图也是如此。不要这样做,这样对数据进行错误建模只会使它更难以处理。通过索引、where子句和连接,可以更有效地使用逻辑上结构化的少量表中的数据。我建议学习基本的关系建模。

如果以后遇到可扩展性问题,可以查看分区,但你不需要成千上万个表来解决问题。


我见过的最大的数据库是一个JD Edwards(我想)ERP系统。它在Oracle上运行了大约20,000个表。但这绝对是一个异常值。 - Mike Sherrill 'Cat Recall'
@MikeSherrill'CatRecall',由于滥用search_path进行贫民分区(即每个客户端克隆一个模式),导致表格计数更高并不太罕见。 - Craig Ringer
@CraigRinger:我没有考虑过那个问题。我很少使用多租户架构。(而且我很感激,有点儿。) - Mike Sherrill 'Cat Recall'

3

从实际意义上讲,它们都没有限制。

一个数据库可以拥有的表的数量受到磁盘系统空间的限制。然而,如果您的数据库拥有超过几千个表,那么这可能更多地反映了您应用程序领域分析不正确。对于union来说也是如此:如果您必须联合多个表,那么您可能应该查看您的表结构。

一个实际的场景是Postgis:有许多具有类似属性的表可以在单个视图中连接(在我看来这是Postgis设计上的缺陷),但通常应该在应用程序端(例如GIS)处理。

您能解释一下需要在一次扫描中查询大量表的情况吗?


情境是这样的:我想创建一个名为“通话详细记录器”的数据库。在这里,我想要分别存储每个被叫号码和塔号码的数字表,这些数字表应该达到数百万级别。我还想为每个被叫号码单独创建视图以供进一步查询。 - Sarfaraz Makandar
2
所以如果我理解你的意思正确的话,你想要存储移动电话通话记录,记录哪个号码打给了另一个号码,并通过哪些基站注册了这些通话?如果是这样,那么您需要一个基站的单独表格,一个包含所有电话号码及其呼叫者姓名和其他详细信息的单独表格。两个表都有主键,然后您可以创建第三个表格来记录呼叫者pkey、接收者pkey、基站pkey、通话时间、持续时间等信息。创建视图非常简单。您认为您需要很多表格的地方在哪里? - Patrick
1
@user3382347 是的,听起来你需要四五个表,而不是成千上万个。不要为每个数字创建视图,使用SQL函数或简单的“where”子句。在规模上,您可能需要分区表,但您不需要(也不想)成千上万的表。 - Craig Ringer
@CraigRinger 谢谢您。 - Sarfaraz Makandar

0

在PostgreSQL中,似乎存在表/关系数量的硬限制。每个数据库最多可以有1,431,650,303个关系。还有其他硬限制,您可以在这里查看所有限制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接