PostGIS에서 public 이외의 스키마를 사용하십니까?


21

현재 우분투에서 PostGIS 2.0.2 및 PostgreSQL 9.1.6을 새로 설치하고 있습니다. 최근에 몇 가지 정보를 접했습니다. 의 모든 데이터를 저장하기 위해 공공 스키마를 사용하는 것은 좋은 생각이 불가능하다는 것을 나타냄.

이러한 이유로 data라는 스키마를 설정하고 자신을 소유자로 만들었지 만 좋은 생각입니까?

내 관심사는 :

  1. 소유자를 설정하는 것 외에도이 새 스키마를 만들 때 (pgAdmin III을 통해) 권한 탭에있는 것들에주의를 기울여야 할 수도 있습니다.
  2. 백업 / 복원을 수행하기 전에 공개 스키마에 데이터를 저장하고 모든 데이터를 별도의 스키마에 덤프하면 동일한 이점을 얻을 수 없습니다 (ogr2ogr 사용시 키 입력이 줄어 듭니다). 과
  3. 새 데이터 스키마에 기본 PostGIS 테이블과 뷰가 없어서 문제가 발생할 수 있습니다 (동일한 데이터베이스 내의 퍼블릭 스키마에 있음).


3
예, 여전히 유효합니다. 요점은 사용자 데이터를 시스템 데이터 및 기능과 분리 할 때 더 깨끗하다는 것입니다.
John Powell

PostGIS 사용자는 아니지만 귀하의 질문에 대한 가장 좋은 답변은 gis.stackexchange.com/a/270522/115 일 것으로 생각 되므로 동의하면 동의 확인 표시를 옮기십시오.
PolyGeo

1
이 질문은 두 가지 질문이어야합니다. 수락 된 답변은 작성된대로 질문에 답변하지 않습니다. 이 질문은 그것의로 재 오픈해야 하지 PostGIS와 객체 자체가 아니라에서 개체로 작업 할 수 있는지 여부를 요구하고이 질문의 중복 public스키마. 다른 질문은 PostGIS 확장 객체를 이외의 스키마에 설치하는 것 public입니다. 이것들은 다른 두 가지입니다!
Kenny Evitt

답변:


7

이제 공식 사이트에서 PostGIS 확장명을 다른 스키마로 이동 하는 페이지에서 설명합니다 . 올바른 방법은에 확장을 설치하는 것 public입니다. 이것이 유일한 옵션입니다. 확장은 더 이상 재배치를 지원하지 않습니다. 다음은 사이트에서 복사 한 다음 명령을 실행하는 것입니다.

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

ALTER EXTENSION postgis 
  SET SCHEMA postgis;

2
이것은 쓰여진 질문에 대답 하지 않습니다 . 허용되는 답변 이 아니 어야합니다 . 그것이 명확하게 대해 물어 "내 새의 기본 PostGIS와 테이블과 뷰 있지 않는 data스키마를 (그들은에 public동일한 데이터베이스에서 스키마)". 이 답변은 유용하며 내가 찾던 것이지만 질문과 직접 관련이 없습니다 .
Kenny Evitt

20

PostGIS 데이터베이스를 공간적으로 활성화하면 관련 함수, SRS 테이블 및 뷰가 상태에 따라 퍼블릭 스키마에 배치됩니다. 그렇다고 자신의 공간 테이블 전체 또는 일부가 동일한 공용 스키마에 있어야한다는 의미는 아닙니다. PostGIS는 여전히 "새로운"스키마의 모든 공간 데이터에서 작동합니다.

사실, 나는 보통 응용 프로그램 특정 테이블을 별도의 스키마에 배치합니다. 이렇게하면 PostGIS로 주요 버전을 업그레이드해야하는 경우 공간 도구를 대체하는 절차와 별도로 별도의 절차로 응용 프로그램 별 테이블 백업 및 복원을 유지할 수 있습니다.

그래서 당신이 잘하고 있다고 생각합니다. 마지막으로, 아직 수행하지 않은 경우 검색 경로에 새 스키마를 추가하는 것이 좋습니다.

ALTER DATABASE my_db SET search_path = gc, public;


고마워 마틴 "public"이외의 사용자 정의 스키마에서 테이블에 공간 함수를 사용할 수 있다는 의미입니까?
alextc

다른 스키마에 데이터를 어떻게 추가합니까? 아닙니다 public? 예를 들어 데이터 추가 shp2psqltest.table여전히 데이터를 넣 public?
knutole

@knutole. 언급했듯이 ArcCatalog를 사용하여 피쳐 클래스를 가져 오거나 새 피쳐로 만들었습니다. shp2psql을 사용하여 public 이외의 사용자 정의 스키마에 데이터를 추가 할 수 있는지 잘 모르겠습니다.
alextc

1
이것이 정답입니다.
Kenny Evitt

12
  1. 스키마를 사용하여 구축 할 수있는 조직 전략 중 하나는 사용자가 한 스키마에서는 번성하게 만들지 만 다른 스키마에서는 파울 수 없도록하는 것입니다. 따라서 이런 식으로 스키마를 사용하려면 pgAdmin의 권한 탭에서 수행 할 수 있습니다. 그러나 반드시 그렇게 할 필요는 없으므로 여러 스키마에서 동일한 권한을 유지하려면 괜찮습니다.

  2. 연결된 기사를 기반으로 모든 것을 공개적으로 유지하는 문제는 데이터를 덤프 할 때 시스템 테이블과 관계가 데이터와 섞일 수 있다는 것입니다. 모든 데이터를 새로운 스키마로 옮기더라도 다시는 걱정할 필요가 없습니다.

  3. 전혀 문제 없습니다. (증거를 위해 SRS 테이블을 검색 할 때 public.spatial_ref_sys를 지정할 필요가 없습니다.)


6

하나의 추가 팁 (아마도 이미 이것을 보았을 수도 있음) "데이터"스키마를 사용자의 기본 search_path에 추가하고 싶을 것입니다. 다음과 같은 것 :

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

포인트 2와 관련하여 원본 DB에 더 이상 액세스 할 수없는 경우 때때로 복원해야합니다. (이것이 백업의 이유 중 하나입니다 ...) 따라서 실제로 필요할 때 데이터를 별도의 스키마로 옮길 기회가 없을 수 있습니다.


1

우리는 임시 분석 / dev 테이블 결과를 위해 공개 스키마를 사용한 다음 영구적으로 사용하기 위해 더 체계화 된 스키마 (폴더?)로갑니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.