DB/PostgreSQL

shp2pgsql로 PostgreSQL에 shp 파일 import 하기

심플블루 2020. 6. 16. 09:59
반응형

# shp2pgsql 을 사용하여 PostgreSQL에 shp 파일을 import 하는 방법

  • PostGIS 2.0 Shapefile and DBF Loader Exporter 을 이용하는 방법도 있다.
    (GUI 툴을 이용하는 방법이다.)
  • shp2pgsql 은 스크립트 명령어를 이용하여 shp 파일을 import 하는 방법이다.
    (다수의 shp 파일을 import 할때는 이 방법이 더 간단할 수 있다.)
  • PostGIS 라는 확장 프로그램이 먼저 설치되어 있어야 한다.


# PostgreSQL 데이터베이스로 PostGIS 불러오기 

  • PostGIS는 PostgreSQL의 확장프로그램으로, 데이터베이스에 GIS(지리정보 시스템) 객체를 저장할 수 있게 해줍니다. PostGIS는 GiST 기반 R-Tree 공간 인덱스를 지원하며 GIS 객체의 분석 및 공간 처리를 위한 기능을 포함하고 있습니다.
  • 우선 PostgreSQL을 처음 설치한 경로에 PostGIS가 설치되어야 한다. 그 후 데이터베이스로 PostGIS라는 확장프로그램을 불러오는 것이다.
    즉, 자바나 C언어에서 외부함수를 사용하기 위해선 해당 함수의 코드가 로컬 디바이스에 다운로드 되어 있어야 하고, 그 후 코드에 포함시켜 사용하는 원리와 비슷하다.
[psql 사용] 데이터베이스로 PostGIS 확장프로그램 불러오기

psql을 사용하여 PostgreSQL에 접속한다.

CREATE EXTENSION postgis;  를 입력 후 실행한다. 
해당 구문이 성공적으로 실행 된 후 CREATE EXTENSION 메세지를 확인할 수 있다. 
이로서 해당 데이터베이스로 PostGIS 확장프로그램을 불러왔다.
ERROR 발생 시 Application Stack Builder 를 사용하여 PostGIS를 다운받은 후 설치를 진행한다. 
[참조] https://sujinisacat.tistory.com/3

# shp2pgsql 실행하기 

윈도우 cmd 창에서 shp2pgsql 명령어 실행하여 start 하기

cmd 창을 연다

cmd 창을 연다
(단축키는 Windows키 + R키 이다.)

shp2pgsql 실행하기

cmd 창에서 shp2pgsql 명령어를 입력 후 실행한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Microsoft Windows [Version 10.0.18362.900]
(c) 2019 Microsoft Corporation. All rights reserved.
 
C:\Users\new31>shp2pgsql
RELEASE: 2.5.3 (r17699)
USAGE: shp2pgsql [<options><shapefile> [[<schema>.]<table>]
OPTIONS:
  -s [<from>:]<srid> Set the SRID field. Defaults to 0.
      Optionally reprojects from given SRID (cannot be used with -D).
 (-d|a|c|p) These are mutually exclusive options:
     -d  Drops the table, then recreates it and populates
         it with current shape file data.
     -a  Appends shape file into current table, must be
         exactly the same table schema.
     -c  Creates a new table and populates it, this is the
         default if you do not specify any options.
     -p  Prepare mode, only creates the table.
  -<geocolumn> Specify the name of the geometry/geography column
      (mostly useful in append mode).
  -D  Use postgresql dump format (defaults to SQL insert statements).
  -e  Execute each statement individually, do not use a transaction.
      Not compatible with -D.
  -G  Use geography type (requires lon/lat data or -s to reproject).
  -k  Keep postgresql identifiers case.
  -i  Use int4 type for all integer dbf fields.
  -I  Create a spatial index on the geocolumn.
  -<filename>  Specify a file containing a set of mappings of (long) column
     names to 10 character DBF column names. The content of the file is one or
     more lines of two names separated by white space and no trailing or
     leading space. For example:
         COLUMNNAME DBFFIELD1
         AVERYLONGCOLUMNNAME DBFFIELD2
  -S  Generate simple geometries instead of MULTI geometries.
  -<dimensionality> Force geometry to be one of '2D''3DZ''3DM'or '4D'
  -w  Output WKT instead of WKB.  Note that this can result in
      coordinate drift.
  -<encoding> Specify the character encoding of Shape's
      attribute column. (default: "UTF-8")
  -N <policy> NULL geometries handling policy (insert*,skip,abort).
  -n  Only import DBF file.
  -T <tablespace> Specify the tablespace for the new table.
      Note that indexes will still use the default tablespace unless the
      -X flag is also used.
  -X <tablespace> Specify the tablespace for the table's indexes.
      This applies to the primary key, and the spatial index if
      the -I flag is used.
  -?  Display this help screen.
 
  An argument of `--' disables further option processing.
  (useful for unusual file names starting with '-')
C:\Users\new31>
cs

cmd 창에서 shp2pgsql 명령이 정상적으로 실행될 경우 해당 메세지를 확인할 수 있다.
해당 도움말은 shp2pgsql에서 사용할 수 있는 옵션 리스트이다.

# shp2pgsql 사용하여 shp 파일을 import 하기

shp2pgsql 명령문

-s 옵션은 해당 shp 파일의 좌표계값이다. 
-W 옵션은 해당 shp 파일의 인코딩 설정값이다. 기본 값은 UTF-8이고 shp 파일에 한글이 포함되어 있다면 cp949로 설정해 준다.
 경로에 한글이 들어갈 경우 오류가 발생할 수 있다. 
-U 옵션으로 계정을 지정해 준다.
-d 옵션으로 데이터베이스를 지정해 준다.

완료 후 COMMIT 확인

import가 성공적으로 완료된 후엔 COMMIT 명령문이 뜨는 걸 확인할 수 있다.

# psql로 import된 shp 파일 확인하기

import 후 생성된 테이블 확인

import 후엔 shp 파일의 이름대로 테이블이 생성된다.
따라서 해당 shp 파일의 이름으로 테이블이 생성됐는지 조회를 해보자.
SELECT * FROM pg_tables WHERE TABLENAME = 'grid_pp_1km'; 를 실행하자.


import 후 생성된 테이블 내용 확인

해당 shp 파일의 내용을 조회해보자.
SELECT * FROM grid_pp_1km limit 1; 을 실행하면 shp 파일의 내용을 확인할 수 있다. (첫번째 row만 출력한다.)


# import 실패 시 체크해 봐야 할 사항

크게 이 3가지 이유로 import failed나 import 오류가 발생한다.

  • CREATE EXTENSION postgis; 명령문으로 PostGIS 확장프로그램을 DB로 불러오지 않았다.
  • 파일명이나 경로에 한글이 포함되어 있다.
  • shp 파일에 한글이 포함되어 있는데, import시에 인코딩 옵션을 cp949로 하지 않았다.
    (영문자와 숫자로 이루어진 shp파일은 euc-kr로 설정한다.)


반응형