将PostGIS空间功能添加到PostgreSQL中“ public”以外的自定义模式


15

最近,我使用pgAdmin在PostgreSQL 9.1数据库服务器上创建了PostGIS 2.0.3数据库。发现在“扩展”中安装了“ PostGIS”扩展。将所有空间功能添加到“公共”模式。没关系。

现在,我要将所有数据存储到一个名为“ gc”的新方案中。但是,如何使所有空间功能安装在该“ gc”模式中?模式中没有单个功能。但是,当我尝试从ESRI ArcCatalog 10.1导入/新建要素类到该架构时,它起作用了!要素类可以导入并显示在QGIS中。

有人可以给我任何提示或想法吗?

我是PostgreSQL和PostGIS的新手。



@MartinF有一个(不完全)这个问题的答案,在给你链接的问题,但这个问题其实是在问一些非常不同的。
肯尼·埃维特

该问题的标题也可能是“是否将PostGIS安装到公共模式之外的其他模式?”。
肯尼·埃维特

Answers:


3

以下是用于将PostGIS扩展安装到gc模式中的示例命令:

CREATE SCHEMA gc;

CREATE EXTENSION postgis SCHEMA gc;

如果已安装PostGIS及其对象,请使用以下示例命令 PostGIS及其对象移动到适用于PostGIS 2.4.4版的新架构:

CREATE SCHEMA gc;

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

ALTER EXTENSION postgis
SET SCHEMA gc;

ALTER EXTENSION postgis
UPDATE TO "2.4.4next";

ALTER EXTENSION postgis
UPDATE TO "2.4.4";

这不是严格必要的;很有帮助:

ALTER DATABASE whatever
SET search_path = public,gc;

1

肯尼·埃维特(Kenny Evitt)已经解释了最重要的事情。但是,这里有一些其他信息:

PostgreSQL有数据库,表空间和模式,由于它们是严格分开的,因此不可能执行从一个数据库到另一个数据库的联接。一个数据库可以具有多个模式,并且可以将某种模式的内容连接到另一模式。有关更多信息,请参阅以下文档:

在gc模式中加载PostGIS的另一种可能性是:

t=# create schema gc;
CREATE SCHEMA
t=# set search_path to gc;
SET
t=# create extension postgis;
CREATE EXTENSION

我既不是Arc Catalog的专家,也不是pgadmin的专家,但是我假设发生了以下三种可能性之一:

  1. Postgresql 本机支持几何数据类型。但是您不应该在地理环境中信任它,因为没有提供CRS元数据以及转换功能。您只是幸运而一切都没有。
  2. 在未找到PostGIS扩展名后,Arc Catalog以某种方式创建了该扩展名而没有通知用户。为此,您可以在该步骤之前和之后查看现有表。

在psql中,您可以通过键入以下内容来执行此操作:

\d
           List of Relations
 Schema |       Name        |   Type  | Owner 
--------+-------------------+---------+----------
 gc     | geography_columns | View    | postgres
 gc     | geometry_columns  | View    | postgres
 gc     | raster_columns    | View    | postgres
 gc     | raster_overviews  | View    | postgres
 gc     | spatial_ref_sys   | Table   | postgres

如果看到此消息,则说明PostGIS已作为扩展安装。第三种可能性是ArcCatalog会执行以下操作:

set search_path to $all_schemas;
import to gc;

在这种情况下,您也很幸运。但是也许,ArcCatalog最终会做些更复杂的事情……


0

这是您的解决方案:

CREATE SCHEMA gc;

CREATE EXTENSION postgis SCHEMA gc;

如果您已经在公共模式中安装了postGIS扩展,并且想在gc中移动,请编写以下代码:

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

ALTER EXTENSION postgis 
  SET SCHEMA gc;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.