我目前正在Ubuntu上重新安装PostGIS 2.0.2和PostgreSQL 9.1.6。我最近遇到了一些信息,表明使用公共模式存储所有数据不是一个好主意。

为此,我建立了一个名为data的模式,并让自己成为所有者,但这是个好主意吗?

我担心的是:


除了设置所有者外,我可能还需要在“权限”选项卡上注意以下事项:创建新的模式(通过pgAdmin III);
通过在备份/还原之前将数据存储在公共模式中并将所有数据转储到单独的模式中,我可能不会获得相同的好处(这将节省一些按键操作)使用ogr2​​ogr时);和
我可能会遇到麻烦,因为新数据架构中没有默认的PostGIS表和视图(它们位于同一数据库的公共架构中)。


评论

在此处查看新答案gis.stackexchange.com/a/270522/6052

是的,它仍然有效。主要要点是它更清洁,因为您可以将用户数据与系统数据和功能分开。

我不是PostGIS用户,但我怀疑现在最好的答案是gis.stackexchange.com/a/270522/115,因此,如果您同意,我建议您将“接受”复选标记移到该位置。

这个问题应该是两个问题。接受的答案不回答书面问题。应该重新打开此问题,因为它与该问题不是重复的,它询问PostGIS对象本身是否可以与不在公共模式中的对象一起使用。另一个问题是关于将PostGIS扩展对象安装到公共模式以外的其他模式。这是两件事!

#1 楼

现在,可以在官方网站的标题为“将PostGIS扩展扩展到其他模式”的页面中解决此问题。正确的方法是将扩展安装到public中。这是唯一的选择。该扩展不再支持重定位。接下来是运行以下命令(从站点复制),

UPDATE pg_extension 
  SET extrelocatable = TRUE 
    WHERE extname = 'postgis';

ALTER EXTENSION postgis 
  SET SCHEMA postgis;


评论


这并不能回答书面的问题。它不应该是公认的答案。显然是在问“在我的新数据模式中没有默认的PostGIS表和视图(它们在同一数据库的公共模式中)”。这个答案很有用,这是我一直在寻找的东西,但与问题没有直接关系。

–肯尼·埃维特(Kenny Evitt)
18年8月9日在15:22

#2 楼

在空间上启用PostGIS数据库时,相关状态,相关功能,SRS表和视图将按您声明的方式放置在公共模式中。这并不意味着您所有或任何自己的空间表都必须位于同一公共模式中。 PostGIS仍将在“新”模式中的所有空间数据上运行。

实际上,我通常将应用程序专用表放在单独的模式中。这样,如果您需要升级到PostGIS的主要版本,则可以将特定于应用程序的表备份和还原与替换空间工具的过程分开,作为一个单独的过程。

认为你做得很好。最后,如果您还没有这样做,最好将新架构添加到搜索路径:

ALTER DATABASE my_db SET search_path = gc, public;

评论


谢谢马丁。这是否意味着我可以在“公共”以外的自定义模式中对表使用空间函数?

– alextc
2014年2月21日,下午3:38

您如何将数据添加到另一个架构,即。不公开吗?用例如添加数据。 shp2psql到test.table仍将数据公开?

– knutole
2015年7月3日,9:54

@knutole。如前所述,我使用ArcCatalog导入/新建要素类。我不确定是否可以使用shp2psql将数据添加到非public的自定义架构中。

– alextc
17-10-3在3:54

这应该是公认的答案。

–肯尼·埃维特(Kenny Evitt)
18年8月10日在14:22

#3 楼


可以使用模式构建的一种可能的组织策略是允许用户在一种模式中猖ramp运行,而又不能在另一种模式中犯规。因此,如果您想以这种方式使用架构,可以在pgAdmin的权限选项卡中完成。但这不是必需的,因此,如果您只想在多个模式之间维护相同的特权,那就很好。
根据链接的文章,将所有内容公开保留的问题是转储时数据,您很可能将系统表和关系与数据混合在一起。如果将所有数据移动到新的架构,则无需再担心。
完全没有问题。 (为证明起见,请注意,当您要搜索SRS表时不必指定public.spatial_ref_sys。)


#4 楼

另一个提示(也许您已经遇到了这一点)。您可能需要将“数据”模式添加到用户的默认search_path。诸如此类:

 ALTER USER <your_user_name> SET search_path=public,data,$USER; 
 


关于第2点,有时您需要恢复不再有访问原始数据库的权限。 (这就是备份的原因之一...)因此您可能没有机会在实际需要时将数据移至单独的架构。

#5 楼

我们使用公共架构进行临时分析/开发人员表结果,然后进入更具组织性的架构(文件夹?)以供永久使用。