Hinzufügen von räumlichen PostGIS-Funktionen zu einem anderen benutzerdefinierten Schema als "public" in PostgreSQL

15

Kürzlich habe ich mit pgAdmin eine PostGIS 2.0.3-Datenbank auf einem PostgreSQL 9.1-Datenbankserver erstellt. Die Erweiterung "PostGIS" wurde unter "Erweiterungen" als installiert gefunden. Alle räumlichen Funktionen wurden dem "öffentlichen" Schema hinzugefügt. Das ist gut.

Jetzt möchte ich alle meine Daten in einem neuen Schema namens "gc" speichern. Wie kann ich jedoch alle räumlichen Funktionen in diesem "gc" -Schema installieren? Das Schema enthält keine einzelne Funktion. Als ich jedoch versuchte, eine Feature-Class aus ESRI ArcCatalog 10.1 in dieses Schema zu importieren / neu zu erstellen, funktionierte dies! Die Feature-Class konnte importiert und in QGIS angezeigt werden.

Kann mir jemand einen Tipp oder eine Idee dazu geben?

Ich bin neu in PostgreSQL und PostGIS.

alextc
quelle
Gerade bemerkt: bereits behandelt unter gis.stackexchange.com/questions/43187/…
Martin F
@MartinF Es gibt eine (unvollständige) Antwort auf diese Frage bei der Frage, mit der Sie verknüpft haben, aber diese Frage stellt wirklich etwas ganz anderes.
Kenny Evitt
Diese Frage könnte auch mit "Installieren von PostGIS in einem anderen als dem öffentlichen Schema" betitelt sein.
Kenny Evitt

Antworten:

3

Hier sind Beispielbefehle zum Installieren der PostGIS-Erweiterung in ein gcSchema:

CREATE SCHEMA gc;

CREATE EXTENSION postgis SCHEMA gc;

Hier sind Beispielbefehle zum Verschieben von PostGIS und seinen Objekten in ein neues Schema für Version 2.4.4 von PostGIS, falls Sie es bereits installiert haben:

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";

Dies ist nicht unbedingt erforderlich. nur hilfreich:

ALTER DATABASE whatever
SET search_path = public,gc;
Kenny Evitt
quelle
1

Kenny Evitt hat bereits die wichtigsten Dinge erklärt. Trotzdem hier noch ein paar zusätzliche Informationen:

Postgresql verfügt über Datenbanken, Tablespaces und Schemas, und es ist unmöglich, Verknüpfungen von einer Datenbank zur anderen auszuführen, da diese streng voneinander getrennt sind. Eine Datenbank kann mehr als ein Schema haben, und es ist möglich, etwas von einem Schema zu einem anderen zu verknüpfen. Weitere Informationen finden Sie in den Dokumenten:

Eine andere Möglichkeit, PostGIS in Ihr gc-Schema zu laden, ist die folgende:

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

Ich bin weder Experte für Arc Catalog noch für pgadmin, aber ich gehe davon aus, dass eine der folgenden drei Möglichkeiten eingetreten ist:

  1. Postgresql unterstützt geometrische Datentypen nativ . In Geo-Kontexten sollten Sie dem jedoch nicht vertrauen, da CRS-Metadaten sowie Transformationsfunktionen nicht zur Verfügung stehen. Du hast nur Glück gehabt und nichts ist kaputt gegangen.
  2. Nachdem Arc Catalog eine PostGIS-Erweiterung nicht gefunden hat, wurde sie auf irgendeine Weise erstellt, ohne den Benutzer zu benachrichtigen. Um dies zu überprüfen, können Sie sich die vorhandenen Tabellen vor und nach diesem Schritt ansehen.

In psql können Sie dies tun, indem Sie Folgendes eingeben:

\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

Wenn Sie dies sehen, wurde PostGIS als Erweiterung installiert. Die dritte Möglichkeit besteht darin, dass ArcCatalog Folgendes ausführt:

set search_path to $all_schemas;
import to gc;

In diesem Fall haben Sie auch nur Glück gehabt. Aber vielleicht macht ArcCatalog am Ende etwas raffinierteres ...

Yorkie
quelle
0

Hier ist Ihre Lösung:

CREATE SCHEMA gc;

CREATE EXTENSION postgis SCHEMA gc;

Wenn Sie die postGIS-Erweiterung bereits in Ihrem öffentlichen Schema installiert haben und in gc verschieben möchten, schreiben Sie folgenden Code:

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

ALTER EXTENSION postgis 
  SET SCHEMA gc;
Tekson
quelle