Postgresql - 每个人一个数据库,或每个客户一个数据库

时间:2010-05-11 04:14:30

标签: database postgresql

我正在开发一个基于Web的业务应用程序,每个客户都需要拥有自己的数据(想想basecamphq.com类型模型)对于可扩展性和易于升级,我更喜欢拥有一个数据库每个客户获得数据的过滤版本。问题是如何保证他们将沙盒保存到他们自己的数据中。试图在代码中强制执行它似乎是一场等待发生的灾难。我知道Oracle有一种方法可以根据登录ID为每个查询附加一个where子句,但是Postgresql有类似的东西吗?

如果没有,我可以使用不同的设计模式(比如为每个过滤的客户创建每个表的视图)?

更糟糕的情况是,拥有1000个100M数据库与拥有单个1Tb数据库的性能/内存开销是多少?我需要在每个客户的基础上提供备份/恢复功能,这在单个数据库上很简单,但如果他们与其他客户共享数据库则相当棘手。

2 个答案:

答案 0 :(得分:1)

您可能希望将Veil添加到PostgreSQL安装中。

答案 1 :(得分:0)

模式加上继承的表可能适用于此,创建主表然后将表继承到每个客户模式,这些模式提供公司ID或名称字段默认值。

为每个客户设置每个架构的权限,并为每个用户设置架构搜索路径。在每个模式中使用相同的表名,以便查询保持不变。