PostgreSQL数据库的表数量是否有限制?
我在PostgreSQL中创建了一个数据库,叫做testdb。
在这个数据库里,我有一组通用的表,分别是xxx_table_one、xxx_table_two和xxx_table_three。
现在,我有一段Python代码,想要动态地创建和删除这3个表的“集合”,并且在表名中加上一个独特的标识符,以区分不同的“集合”,比如:
集合 1
testdb.aaa_table_one
testdb.aaa_table_two
testdb.aaa_table_three
集合 2
testdb.bbb_table_one
testdb.bbb_table_two
testdb.bbb_table_three
我想这样做的原因是为了把多个大型相关数据集合分开存放。我需要定期更新单个数据集合,如果可以直接删除数据集合的表,然后重新创建一整套新表,这样会简单很多。此外,我还要提到,不同的数据集合适合放在同样的结构里,所以我可以用一个标识符把所有数据集合放在一套表里,而不是用不同的表来分开它们。
我想知道几件事:
- PostgreSQL对每个数据库的表数量有限制吗?
- 如果一个数据库里有很多表,会对性能有影响吗?
- 把数据集合放在不同的表集合中,和把它们都放在同一套表中,性能上有什么区别?比如,如果数据分散在多个表中,我可能需要写更多的查询来同时查询多个数据集合,而不是只在一套表里查询。
3 个回答
如果你的数据之间没有关系,我觉得你的表可以放在不同的模式(schema)里。比如,你可以使用 SET search_path TO schema1, public
这样的命令,这样你在查询的时候就不需要动态生成表名了。我打算在一个存储日志和其他跟踪信息的大数据库上试试这种结构。
如果你的操作系统有限制,或者目录的大小太大,你也可以更改你的 tablespace
。
1. PostgreSQL(一个数据库系统)本身并没有直接限制这个数量,但你的操作系统会有影响,这取决于最大目录的大小。
2. 这也可能和你的操作系统有关。有些文件系统在处理大目录时会变得比较慢。
3. 如果查询涉及到不同的表,PostgreSQL就没办法优化这些查询。所以,使用更少的表(或者只用一个表)会更高效。
PostgreSQL这个数据库系统本身没有太多的限制,真正限制你的往往是你的硬件设备,这也是你会遇到大部分问题的地方。http://www.postgresql.org/about/
在一个数据库里,你可以创建多达2的32次方的表,也就是超过40亿个表。