2013-08-22 118 views
0

我们最近在系统中添加了Geodjango和PostGIS。我发现PostGIS将自己安装在public模式中。现在,我们正在使用的客户端租赁PostgreSQL的模式,因此,例如客户端A将有一个模式tenant_A,所以我们通常手动设置搜索路径:PostGIS和PosgreSQL搜索路径

SET search_path TO tenant_A; 

但由于PostGIS的生活在公众的架构里面,我现在就已经做到这一点:

SET search_path TO tenant_A, public; 

难道永远做有意义的只是移动的PostGIS表 - 甚至只有geometry_columns表 - 成单独的客户端模式?这样做的好处是:1)客户的GIS数据将具有更大的分离度; 2)特定于租户的维护(备份,迁移等)将更加容易。

回答

1

这很难讲,因为PostGIS对象对于所有客户端都是一样的。如果每个客户端都安装一个单独的实例,则会浪费大量的磁盘空间,同时也会降低缓存效率。

如果其他对象存在于某些客户端不感兴趣的公共模式中,则可以选择将PostGIS安装到专用模式(如postgis),并将其包含在search_path中。

如果真要严格隔离的客户,你必须创建单独的数据库或每个客户端甚至是DB集群。

+0

是的。那么只有可以包含不同于客户端到客户端的数据的geometry_columns表格呢? – Goro

+0

@Goro:尽管在单个表格中移动并不会改变在'search_path'中需要有PostGIS模式。您首先需要它为功能和操作员。顺便说一句,['geometry_columns'](http://postgis.net/docs/using_postgis_dbmanagement.html#geometry_columns)是自PostGIS 2.0以来的一个视图。 –