벌써 QGIS는 물론 다른 도구들을 통해 여러 가지 데이터베이스 작업을 수행하는 방법을 살펴보았습니다. 그러나 이제 그와 동일한 기능은 물론 관리 지향 도구들을 더 많이 제공하는 DB 관리자 도구에 대해 배워볼 때입니다.
이 강의의 목표: QGIS DB 관리자를 이용해서 공간 데이터베이스와 상호 작용을 하는 방법을 배우기.
먼저 메뉴에서 Database ‣ DB Manager ‣ DB Manager 항목을 선택하거나 툴바에서 다음 DB 관리자 아이콘을 클릭해서 DB 관리자 인터페이스를 실행해야 합니다.
이전에 설정한 연결에서 myPG 부분의 public 스키마를 확장하면 이전 강의에서 작업했던 테이블을 볼 수 있어야 합니다.
사용자 데이터베이스가 담고 있는 스키마에 대한 몇몇 메타데이터를 볼 수 있다는 사실을 알 수 있습니다.
스키마란 PostgreSQL 데이터베이스에 있는 테이블과 다른 오브젝트 및 해당 권한과 제약을 위한 컨테이너를 묶는 한 가지 방식입니다. PostgreSQL 스키마 관리는 이 교재의 범위를 벗어나지만, PostgreSQL documentation on Schemas <http://www.postgresql.org/docs/9.1/static/ddl-schemas.html> 에서 스키마 관리에 대한 더 자세한 정보를 얻을 수 있습니다. DB 관리자를 사용해 새 스키마를 생성할 수 있지만, 스키마를 효율적으로 관리하려면 pgAdmin III 또는 커맨드라인 인터페이스와 같은 도구가 필요할 것입니다.
사용자 데이터베이스 내부의 테이블을 관리하는 데에도 DB 관리자를 사용할 수 있습니다. 벌써 커맨드라인에서 테이블을 생성하고 관리하는 다양한 방법을 배웠지만, 이제 DB 관리자에서 이런 작업을 하는 방법을 배워보겠습니다.
먼저 트리에서 테이블명을 클릭한 다음, Info 탭에서 테이블의 메타데이터를 살펴보면 도움이 됩니다.
이 패널에서 테이블에 대한 General Info 는 물론 PostGIS 확장 프로그램이 도형 및 공간 참조 시스템에 대해 유지관리하고 있는 정보를 볼 수 있습니다.
Info 탭을 스크롤다운할 경우, 현재 보고 있는 테이블의 Fields, Constraints, Indexes 에 대한 자세한 정보를 볼 수 있습니다.
DB 관리자를 사용하면 레이어 트리에 있는 레이어의 속성 테이블을 보는 것과 동일한 방식으로 간단히 데이터베이스 내부의 레코드를 볼 수 있다는 것도 도움이 됩니다. Table 탭을 선택하면 데이터를 둘러볼 수 있습니다.
레이어의 데이터를 맵 프리뷰로 보여주는 Preview 탭도 있습니다.
트리에 있는 레이어를 오른쪽 클릭한 다음 Add to Canvas 를 선택하면 해당 레이어를 사용자 맵에 추가할 것입니다.
지금까지 데이터베이스의 스키마와 테이블의 메타데이터를 살펴보기만 했지만, 테이블을 수정하거나 새 열을 추가하려면 어떻게 해야 할까요? DB 관리자에서 직접 이런 작업을 할 수 있습니다.
트리에서 편집하고자 하는 테이블을 선택하십시오.
메뉴에서 Table ‣ Edit Table 항목을 선택해서 Table Properties 대화 창을 여십시오.
이 대화 창에서 열을 추가하고, 도형 열을 추가하고, 기존 열을 편집하거나 완전히 삭제할 수 있습니다.
Constraints 탭에서 어떤 필드를 기본 키로 사용할지 관리하거나 기존 제약을 드롭할 수도 있습니다.
Indexes 탭에서 공간 및 일반 인덱스 모두를 추가하거나 삭제할 수 있습니다.
이제 데이터베이스에 있는 기존 테이블을 작업하는 과정을 배웠으니, DB 관리자를 이용해서 새 테이블을 생성해봅시다.
DB 관리자를 닫았을 경우 다시 DB 관리자 창을 열고, 사용자 데이터베이스에 이미 존재하는 테이블 목록이 보일 때까지 트리를 확장하십시오.
메뉴의 Table ‣ Create Table 항목을 선택해서 Create Table 대화 창을 여십시오.
기본값인 Public 스키마를 이용하고, 테이블명을 places 라고 설정하십시오.
id, place_name, elevation 필드를 다음과 같이 추가하십시오.
id 항목을 기본 키로 설정했는지 확인하십시오.
Create geometry column 항목의 체크박스를 체크한 다음 POINT 유형으로, Name 을 geom 으로, SRID 를 4326 으로 설정하도록 하십시오.
Create spatial index 항목의 체크박스를 체크한 다음, Create 를 클릭해서 테이블을 생성합니다.
테이블이 생성되었다고 알려주는 대화 창을 닫고, Close 를 클릭해서 Create Table 대화 창을 닫으십시오.
이제 DB 관리자에서 새 테이블을 검사해보면 물론 어떤 데이터도 없다는 사실을 알게 될 겁니다. 이때 레이어 메뉴의 Toggle Editing 을 통해 해당 테이블에 places 데이터를 추가할 수 있습니다.
DB 관리자를 통해 몇몇 기본적인 데이터베이스 관리 작업을 할 수도 있습니다. 좀 더 완전한 데이터베이스 관리 도구의 대체제로 사용할 수는 분명 없지만, 사용자 데이터베이스를 유지관리하는 데 쓸 수 있는 몇 가지 기능들을 제공하고 있습니다.
종종 데이터베이스 테이블이 아주 커질 수도 있고 자주 수정되는 테이블의 경우 PostgreSQL이 더 이상 필요로 하지 않는 레코드 찌꺼기가 남게 될 수도 있습니다. VACUUM 명령어는 일종의 쓰레기 정리 작업을 수행하며, 또 좀 더 나은 퍼포먼스를 위해 사용자 테이블을 분석하는 옵션도 갖추고 있습니다.
DB 관리자 내부에서 VACUUM ANALYZE 명령어를 실행할 수 있는 방법을 알아보겠습니다.
DB 관리자의 트리에서 사용자 테이블 가운데 하나를 선택하십시오.
메뉴에서 Table ‣ Run Vacuum Analyze 항목을 선택하십시오.
끝입니다! PostgreSQL이 해당 작업을 수행할 것입니다. 사용자 테이블의 크기에 따라 완료하는 데 시간이 걸릴 수도 있습니다.
PostgreSQL Documentation on VACUUM ANALYZE <http://www.postgresql.org/docs/9.1/static/sql-vacuum.html> 에서 VACUUM ANALYZE 처리에 대한 더 자세한 정보를 얻을 수 있습니다.
DB 관리자는 사용자 데이터베이스에 대해 쿼리를 작성하고 그 결과를 살펴볼 수 있는 방법도 제공합니다. 이미 Browser 패널에서 이런 유형의 기능을 배웠지만, DB 관리자에서도 다시 살펴보도록 하겠습니다.
트리에서 lines 테이블을 선택하십시오.
DB 관리자 툴바에서 다음 SQL window 버튼을 선택하십시오.
쿼리 작성 공간에 다음 SQL query 를 작성하십시오.
select * from lines where roadtype = 'major';
Execute (F5) 버튼을 클릭해서 쿼리를 실행하십시오.
이제 Result 패널에서 쿼리와 일치하는 레코드를 볼 수 있을 겁니다.
이 결과를 사용자 맵에 추가하려면 Load as new layer 항목의 체크박스를 체크하십시오.
Column with unique integer values 에 id 열을, Geometry column 에 geom 열을 선택하십시오.
Layer name (prefix) 텍스트 란에 roads_primary 라고 입력하십시오.
Load now! 를 클릭하십시오. 이 결과가 사용자 맵에 새 레이어로 뜰 것입니다.
이제 사용자 쿼리와 일치하는 레이어가 사용자 맵에 나타났습니다. 물론 이 쿼리 도구를 사용해서 이전 강의들에서 살펴보았던 많은 명령어를 포함하는 어떤 임의의 SQL 명령어라도 실행할 수 있습니다.
커맨드라인을 이용해 공간 데이터베이스에 데이터를 임포트하는 방법을 벌써 배웠고 SPIT 플러그인 사용법도 배웠으므로, 이제 DB 관리자를 통해 임포트하는 방법을 배워보겠습니다.
DB 관리자 툴바에서 다음 Import layer/file 버튼을 클릭하십시오.
exercise_data/projected_data 경로에 있는 urban_33S.shp 파일을 입력 데이터셋으로 선택하십시오.
Update Options 버튼을 클릭해서 일부 서식값을 미리 채우십시오.
Create new table 옵션을 반드시 선택하도록 하십시오.
Source SRID 를 32722 로, Target SRID 를 4326 으로 설정하십시오.
Create Spatial Index 항목의 체크박스를 체크하십시오.
:guilabel:`OK`를 클릭해서 임포트를 수행하십시오.
임포트가 성공했다고 알려주는 대화 창을 닫으십시오.
DB 관리자 툴바에서 Refresh 버튼을 선택하십시오.
이제 트리에서 사용자 데이터베이스의 해당 테이블을 클릭해서 검사할 수 있습니다. Spatial ref: 항목의 값이 WGS 84 (4326) 인지 확인해서 데이터가 재투영되었는지 확인하십시오.
트리에 있는 해당 테이블을 오른쪽 클릭한 다음 Add to Canvas 를 선택하면 해당 레이어를 사용자 맵에 추가할 것입니다.
DB 관리자는 물론 사용자의 공간 데이터베이스에서 데이터를 익스포트할 수도 있으므로, 그 방법을 배워보겠습니다.
트리에서 lines 레이어를 선택한 다음 툴바에 있는 Export to File 버튼을 클릭해서 Export to vector file 대화 창을 여십시오.
Output file 항목의 오른쪽에 있는 ... 버튼을 클릭해서 해당 데이터를 exercise_data 디렉터리에 urban_4326 라는 파일명으로 저장하도록 설정합니다.
Target SRID 를 4326 으로 설정하십시오.
:guilabel:`OK`를 클릭해서 익스포트를 시작하십시오.
임포트가 성공했다고 알려주는 대화 창을 닫고, DB 관리자 창도 닫으십시오.
이제 브라우저 패널에서 방금 생성한 shapefile을 검사할 수 있습니다.
이제 QGIS에서 DB 관리자 인터페이스를 통해 사용자의 공간 데이터베이스를 관리하는 방법, 사용자 데이터에 대해 SQL 쿼리를 실행하는 방법, 그리고 데이터를 임포트하고 익스포트하는 방법을 배웠습니다.
다음 강의에서 spatialite 데이터베이스에 대해 이런 동일한 기술들을 사용하는 방법을 살펴보겠습니다.