在PostgreSQL数据库中对对象进行分组

时间:2012-08-29 12:40:46

标签: postgresql schema grouping

我继承了一个带有大型Postgres数据库的项目(超过150个表,超过200个自定义类型,近1000个函数,触发器等)。遗憾的是,所有内容都被转储到一个模式(public)中。从应用程序的角度来看它的工作正常,但这是维护的主要噩梦。

显而易见的是,按功能将这些对象拆分为单独的模式(例如,所有与供应商相关的内容都会进入supplier模式,所有与管理员相关的内容都会进入admin模式等)。当这一切完成后,当然需要对代码进行一些更改(好的,很多更改)来引用新的模式。考虑到Web应用程序包含大约2000个php文件,这可能是一项非常重要的任务。同样,由于系统中的每个php都已经以require_once('controller/config.php');开头,我可以在那里添加一个调用来设置搜索路径以包含所有新模式:SET search_path = 'public, supplier, admin, ...',但不知何故,我不知不觉中我不喜欢这个解决方案。

还有其他方法可以解决问题吗?我不想在重新组织数据库上花费更多的精力。我也几乎不会在主网站上造成任何停机,因为它被世界各地的客户(澳大利亚,欧洲,北美)使用。

你建议我做什么?

2 个答案:

答案 0 :(得分:1)

我认为search_path方法就是你走这条路的必要方法。为什么你下意识地不喜欢解决方案?似乎它可以消除维护噩梦,如果你可以过来它。哪个更糟糕的维护噩梦或search_path使用?

根据docs

  

将数据库对象组织到逻辑组中以使其更多   管理。

答案 1 :(得分:0)

我可以理解不喜欢搜索路径解决方案。但是您知道可以为每个用户或每个数据库设置search_path吗?您可以更改数据库设置search_path,然后您就完成了,更好的是,这不是影响其他人的全局变更。

http://www.postgresql.org/docs/9.1/static/config-setting.html

请记住,每个用户设置都是群集全局并覆盖每个数据库设置。