Postgres中可以创建多少个模式?

55

在使用Postgres实现多租户解决方案时,我需要知道一个Postgres数据库中可以拥有多少个架构。


1
我认为这个问题表明了可能存在设计缺陷。你肯定可以使用一个带有客户端列的数据库。 - Bohemian
19
在单个模式设置中,向表中添加客户列与使用多个模式相比存在设计优缺点。我的观点是这并不是非黑即白的。 - Kuberchaun
6
我当然可以选择那个选项,但我采用了这个方案,因为Postgres有非常强大的多个模式特性,我们应该选择它,而不是在编码和每次查询之前搜索特定客户端时增加努力。 - Arsalan T
3个回答

80

我们测试了成千上万个模式 - 涉及成千上万张表格,没有遇到任何问题。但是还存在一些已知问题:

  • 图形用户界面管理存在问题 - 在启动时读取完整的对象树导致启动缓慢,
  • 使用pg_dump备份时存在问题 - 启动缓慢需要大量时间锁定对象。

感谢分享您的经验!当您说“数千”时,大约是多少? - Marcio Mazzucato
14
@MarcioSimao - 大约一万。现在两年过去了,在基础的管理和备份工具方面,存在着真正的限制。当一个事务中处理的对象数量超过20000个时,pg_dump和pg_restore可能会出现问题。另一个问题是在过大的模式中膨胀的缓存。Postgres会在每个数据库中本地缓存大量数据。当您在大型模式上重用连接时,这些缓存可能会太大并且有时会变慢 - 但这取决于池化程序软件。可用的软件,如pgbouncer或pgpool不够智能:( - Pavel Stehule
2
@PavelStehule 你是如何解决pg_dump问题的?有什么建议吗?我也面临着相同的问题。 - Vinit Kumar
1
@VinitKumar - 我们的模式中有数千个表,但只有几百个应该被转储 - 因此我们使用显式列表(选项-t)。如果您需要所有表,则无法使用pg_dump - 这意味着您不能使用pg_upgrade - 否则它将非常缓慢。 - Pavel Stehule
嗨@PavelStehule!在您分享有关在Postgres数据库中拥有数千个模式的经验几年后,您能否说一下您拥有数千个模式的利弊是否仍然相同?因为我正在一个应用程序部署在云上的项目上工作,所以云服务负责制作整个容器的备份,包括数据库。因此,数据库管理似乎根本不是问题。 - Daiana Sodré
7
@DaianaSodré - 几乎所有的内容仍然是正确的。现在,也许我更好地理解了这种架构的优缺点-它可以减少与连接池相关的某些问题,但另一方面,它可能会增加与内部系统目录缓存膨胀有关的内存问题。因此,我认为最好的解决方案是妥协-更多的数据库,每个数据库内有更多的模式。可能每个有数百个模式的十个数据库比一个有数千个模式的数据库更好。 - Pavel Stehule

7

1

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