postGIS 테이블의 이름을 바꾸고 GeoServer를 업데이트 하시겠습니까?


9

postGIS 테이블 중 하나의 이름을 바꾸고 싶습니다. 그러나 내가 간단한 것을 적용하여 이것을 할 때

ALTER TABLE old_name RENAME TO new_name;

내가 이해하는 것처럼 공간 데이터는 새로운 이름으로 업데이트되지 않습니다. 먼저 함수를 실행하여 이러한 참조를 수정할 수 있습니까?

SELECT probe_geometry_columns()

이 후에 테이블 자체는 괜찮습니까? 아니면 다른 조치를 취해야합니까? 둘째, 새 테이블을 찾도록 GeoServer를 어떻게 업데이트합니까? 나는 위의 명령을 실행하면 현재로서는, 그리고 새 이름을 가리 키도록 GeoServer에 편집 레이어 정보를 ... 나는 아직도 (GeoServer는 여전히 이전 이름으로 찾으려고) 오류가 발생합니다. 정확히, GeoServer에서 레이어 이름은 어디에서 변경해야합니까?

답변:


4

테이블 이름을 바꾸려면 두 곳의 메타 데이터에서 이름을 변경해야합니다. 먼저 PostGIS와 Geoserver 설정에서.

PostGIS를 변경하기 위해 geometry_columns를 직접 업데이트 할 수 있습니다. probe_geometries는 해당 항목을 기하학 열에 삽입하는 효과를 갖지만 누락 된 기하학 열 항목을 삽입하여 모든 테이블의 스키마를 설명하는 효과도 있습니다. 테이블이 많은 경우 비용이 많이들 수 있으므로 geometry_columns 테이블을 직접 업데이트하지 않는 이유는 무엇입니까?

지오 서버를 업데이트하기 위해 다양한 옵션이 있습니다. 확실히 GUI를 통해 수동으로 할 수는 있지만 자동화하려는 느낌이 듭니다. 지오 서버 설치 폴더에서 구성 파일을 편집하고 지오 서버를 다시 시작하는 쉘 스크립트를 작성하지만, 그렇게하는 것도 먼 길입니다. RESTful 호출을 통해 레이어 구성을 조작 할 수있는 geoserver REST 구성 API를 사용하는 것이 좋습니다 .

최신 정보:

"갱신 형상 열"이 명확하지 않은 경우 다음을 수행하십시오.

UPDATE geometry_columns set f_table_name = 'my_new_table_name' where f_table_name = 'my_old_table_name';

8 년 후 업데이트 (!!!) (2018) :

아래에서 언급 한 일부 사람들과 마찬가지로 PostGIS 2.0 이후에는 메타 데이터 테이블이 ALTER 문 이후에 자동으로 업데이트됩니다.


내 무지를 용서하지만 PostGIS를 처음 접했을 때. geometry_columns를 정확히 어떻게 업데이트합니까? probe_ 함수 (매개 변수없이)를 실행하면 같은 일이 있다는 것을 이해 했습니까?
Mimo

1
probe_geometry_columns trac.osgeo.org/postgis/changeset/7548 에서 구현을 살펴보십시오 . db의 모든 단일 테이블을 거치며 스키마에 "geometrytype"문자열이 있는지 찾고 필요한 항목이 없으면 새 레코드를 삽입합니다. geometry_columns에 있습니다. 그럼에도 불구하고 고아 기록은 그대로 남아 있습니다. 그래서 왜 그냥 수행 업데이트 geometry_columns f_table_name는 = SET의 f_table_name의 = 'new_table_name' 'old_table_name'
라기 Yaser Burhum

이것은 보여줍니다Not Found The requested URL /latest/en/user/restconfig/rest-config-api.html was not found on this server.
Scaramouche


7

PostGIS 2.0 이상에서는 사용자가해야 할 일은 정상입니다

ALTER TABLE old_name RENAME TO new_name;

geometry_columns보기 (또는 geography_columns)의 항목도 업데이트됩니다.


3
SELECT Probe_Geometry_Columns();

편리한 유틸리티입니다.

먼저 기존 테이블에 지오메트리 열을 추가하면

SELECT AddGeometryColumn('my_table', 'geo_column', 1234, 'MULTIPOINT', 2);

지오메트리 유형 (geo_column)의 열을 지정된 테이블 (my_table)에 고정하고 SRID (1234), 지오메트리 유형 (MULTIPOINT) 및 차원 수 (2)와 같은 중요한 세부 정보를 작성하는 데 필요한 모든 기능을 제공합니다. geometry_columns 테이블 본질적으로, 그것은 ALTER와 3 개의 업데이트입니다.

다른 방법 (CREATE TABLE AS 등에서 선택된 shapefile에서로드 됨)을 사용하여 지오메트리 열을 만들면 데이터베이스 내에서 잘 작동하지만 외부 응용 프로그램에서는 볼 수없는 공간 테이블이 생길 수 있습니다. geometry_columns에 올바른 세부 정보가 저장되지 않으면 실제 지오메트리 값은 투영 된 점, 선 또는 다각형을 찾는 응용 프로그램에 의미없는 문자열로 나타납니다.

probe 함수를 호출하면 geometry 유형의 각 열을 확인하여 geometry_columns에 새 값을 추가하고 충돌을보고합니다.

질문으로 돌아가서 GeoServer는 이름 변경이 geometry_columns에 반영되지 않으면 이름이 바뀐 테이블에 공간 데이터가 포함되어 있다고 생각하지 않습니다. 고려해야 할 사항은 프로브 기능이 새 테이블 이름을 반영하는 중복 레코드를 생성하지만 원래 레코드를 제거하지는 않는다는 것입니다. GeoServer에 대한 또 다른 잠재적 인 중단입니다.

모든 말은, 나는 당신에게 제안 할 것입니다 : 1) 프로브를 실행 한 다음 즉시 이전 레코드를 삭제하십시오. 또는 2) geometry_columns에서 ALTER로 이름 변경을 추적하여 f_table_name 값을 변경하십시오.

말로 미안하지만 도움이되기를 바랍니다.


당신의 답변에 감사드립니다. postGIS를 더 잘 이해하기 시작했습니다. 그래도 필요한 단계를 잘 모르겠습니다. 먼저 이름 변경을 수행 한 다음 probe ()를 수행해야합니까? geometry_columns를 어떻게 변경합니까?
Mimo

geometry_columns를 변경하는 가장 간단한 방법은 pgAdmin을 열고 테이블을 마우스 오른쪽 단추로 클릭하고 데이터보기를 선택한 후 모든 행보기를 선택하고 이전 테이블 이름이 포함 된 셀을 클릭하고 새 테이블 이름을 입력하는 것입니다. 또는, UPDATE의 geometry_columns 세트 f_table_name = 'new_table_name'f_schema_name은 'SCHEMA_NAME을'= WHERE 및 f_table_name = 'old_table_name'
rec.thegeom

1

SELECT probe_geometry_columns ()의 기능을 잘 모르겠지만 geometry_columns 테이블을 쉽게 확인하여 새 테이블 이름이 있는지 또는 여전히 기존 테이블 이름을 가리키는 지 확인할 수 있습니다.

변경 사항을 "통지"하기 위해 GeoServer 저장소를 다시로드해야한다고 생각합니다. 또는 중지하고 시작하면됩니다.


"GeoServer 저장소 다시로드"는 무슨 뜻입니까?
Mimo

상태 페이지 ( docs.geoserver.org/latest/en/user/webadmin/server/status.html )에는 새로 고침 버튼이 있습니다.
Ian Turton

감사. 그러나 다시로드가 작동하지 않았습니다. 이름이 바뀐 레이어를 찾을 수 없다는 불만이 여전히 GeoServer 오류가 발생합니다. 여전히 이전 이름으로 찾기를 시도합니다.
Mimo

새 테이블 이름을 가리 키도록 레이어 정의를 변경 했습니까?
Ian Turton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.