Dodaj funkcje przestrzenne PostGIS do niestandardowego schematu innego niż „public” w PostgreSQL

15

Ostatnio utworzyłem bazę danych PostGIS 2.0.3 na serwerze bazy danych PostgreSQL 9.1 za pomocą pgAdmin. Znaleziono rozszerzenie „PostGIS” zainstalowane w „Rozszerzeniach”. Wszystkie funkcje przestrzenne zostały dodane do schematu „publicznego”. W porządku.

Teraz chcę zapisać wszystkie moje dane w nowym schemacie o nazwie „gc”. Jednak w jaki sposób mogę sprawić, by wszystkie funkcje przestrzenne zostały zainstalowane w tym schemacie „gc”? W schemacie nie ma jednej funkcji. Jednak gdy próbowałem zaimportować / nową klasę funkcji z ESRI ArcCatalog 10.1 do tego schematu, zadziałało! Klasę elementów można zaimportować i wyświetlić w QGIS.

Czy ktoś mógłby dać mi jakąkolwiek wskazówkę lub pomysł na ten temat?

Jestem nowy w PostgreSQL i PostGIS.

alextc
źródło
Właśnie zauważyłem: zajęto się
Martin F
@MartinF Odpowiedź na to pytanie jest (niepełna) na pytanie, z którym się łączyłeś, ale pytanie to naprawdę zadaje coś zupełnie innego.
Kenny Evitt,
To pytanie można również zatytułować „Instalowanie PostGIS w schemacie innym niż publiczny?”.
Kenny Evitt,

Odpowiedzi:

3

Oto przykładowe polecenia dotyczące instalowania rozszerzenia PostGIS w gcschemacie:

CREATE SCHEMA gc;

CREATE EXTENSION postgis SCHEMA gc;

Oto przykładowe polecenia, aby przenieść PostGIS i jego obiekty do nowego schematu dla wersji 2.4.4 PostGIS, jeśli już go zainstalowałeś:

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

Nie jest to absolutnie konieczne; po prostu pomocny:

ALTER DATABASE whatever
SET search_path = public,gc;
Kenny Evitt
źródło
1

Kenny Evitt wyjaśnił już najważniejsze rzeczy. Niemniej jednak oto kilka dodatkowych informacji:

Postgresql ma bazy danych, przestrzenie tabel i schematy i nie można wykonywać połączeń z jednej bazy danych do drugiej, ponieważ są one ściśle rozdzielone. Jedna baza danych może mieć więcej niż jeden schemat i możliwe jest dołączenie czegoś z jednego schematu do drugiego. Aby uzyskać więcej informacji, zapoznaj się z dokumentami:

Inna możliwość załadowania PostGIS do schematu gc byłaby następująca:

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

Nie jestem ekspertem od Arc Catalog ani od pgadmin, ale zakładam, że wydarzyła się jedna z następujących trzech możliwości:

  1. Postgresql obsługuje natywnie typy danych geometrycznych . Nie należy jednak ufać temu w kontekście geograficznym, ponieważ nie podano metadanych CRS ani funkcji transformacji. Masz szczęście i nic się nie zepsuło.
  2. Katalog Arc w jakiś sposób, nie znajdując rozszerzenia PostGIS, stworzył je bez powiadamiania użytkownika. Aby to sprawdzić, możesz spojrzeć na istniejące tabele przed i po tym kroku.

W psql możesz to zrobić, wpisując:

\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

Jeśli to zobaczysz, PostGIS został zainstalowany jako rozszerzenie. Trzecią możliwością jest to, że ArcCatalog robi coś takiego:

set search_path to $all_schemas;
import to gc;

W tym przypadku masz po prostu szczęście. Ale może ArcCatalog robi w końcu coś bardziej wyrafinowanego ...

Yorkie
źródło
0

oto twoje rozwiązanie:

CREATE SCHEMA gc;

CREATE EXTENSION postgis SCHEMA gc;

Jeśli już zainstalowałeś rozszerzenie postGIS w schemacie publicznym i chcesz przenieść się do gc, napisz następujący kod:

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

ALTER EXTENSION postgis 
  SET SCHEMA gc;
Tekson
źródło