postgis DB의 기존 테이블 (새 스키마 적용)에서 테이블을 만드는 방법은 무엇입니까?


9

지리 공간적으로 활성화 된 테이블이 있습니다. 세계 경계가 포함되어 있습니다. 다른 스키마 (전역, 유럽 등)로 나누고 싶습니다. 내 생각은 다음과 같은 것을 사용하는 것입니다.

CREATE TABLE europe.borders
  AS (SELECT *
         FROM wo_borders
         WHERE admin_lvl2='eu' ); //just an example!

새로운 스키마를 고려하여 지리 공간적으로 활성화하는 기존 테이블에서 테이블을 만드는 것이 옳은 것은 무엇입니까? 기본 postgis 템플릿을 사용하여 새 테이블을 미리 만들어야합니까?

답변:


21

일반적으로 다음과 같이 새로운 지리 공간 테이블을 만들 수 있습니다.

SELECT *
INTO europe.borders
FROM wo_borders
WHERE admin_lvl2 = 'eu';

-- Define a primary key
ALTER TABLE europe.borders ADD PRIMARY KEY (gid);

-- Spatially enable it
SELECT Populate_Geometry_Columns('europe.borders'::regclass);

그러나 이렇게하면 데이터베이스가 분리됩니다 (정규화 해제). 즉, 중복성이 있으므로 한 테이블에있는 정보에 대한 업데이트가 있으면 다른 테이블에 업데이트하기가 어렵습니다. 또한 전 세계에서 하위 지역 만 쿼리를 수행 할 수 없습니다. VIEW를 사용하여 기본 테이블의 파티션에 대한 가상 테이블을 만들 수 있습니다.

-- Make an index on your column used to query the view
CREATE INDEX wo_borders_admin_lvl2_idx ON wo_borders USING btree (admin_lvl2);

-- Now the view
CREATE OR REPLACE VIEW europe.borders_view AS
 SELECT *
 FROM wo_borders
 WHERE admin_lvl2 = 'eu';

-- Spatially enable it
SELECT Populate_Geometry_Columns('europe.borders_view'::regclass);

귀하의 답변은 실제로 내 질문에 대답했으며 postgresql / postgis 데이터베이스의 내부 작업에 대한 이해를 돕습니다! 감사합니다!
nickves
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.