2

我继承了一个带有大型 Postgres 数据库的项目(超过 150 个表、超过 200 种自定义类型、近 1000 个函数、触发器等)。不幸的是,所有内容都被转储到一个模式 ( public) 中。从应用程序的角度来看,它工作得很好,但是维护起来却是一场噩梦。

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

有没有其他方法可以处理问题?我不想在重组数据库上花费比绝对必要更多的精力。我也几乎不会在主网站上造成任何停机时间,因为它被世界各地(澳大利亚、欧洲、北美)的客户使用。

你会建议我做什么?

4

2 回答 2

1

我认为search_path如果您走那条路线,该方法将是您必须这样做的方式。为什么你下意识地不喜欢解决方案?如果你能克服它,它似乎会消除维护的噩梦。哪个是更糟糕的维护噩梦或search_path使用?

根据文档

将数据库对象组织成逻辑组以使其更易于管理。

于 2012-08-29T14:46:54.500 回答
0

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

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

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

于 2012-08-30T00:15:04.093 回答