# 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을 사용하여 PostgreSQL에 접속한다.
CREATE EXTENSION postgis; 를 입력 후 실행한다.
해당 구문이 성공적으로 실행 된 후 CREATE EXTENSION 메세지를 확인할 수 있다.
이로서 해당 데이터베이스로 PostGIS 확장프로그램을 불러왔다.
ERROR 발생 시 Application Stack Builder 를 사용하여 PostGIS를 다운받은 후 설치를 진행한다.
[참조] https://sujinisacat.tistory.com/3
# shp2pgsql 실행하기
윈도우 cmd 창에서 shp2pgsql 명령어 실행하여 start 하기
cmd 창을 연다
(단축키는 Windows키 + R키 이다.)
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. -g <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. -m <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. -t <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. -W <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 하기
-s 옵션은 해당 shp 파일의 좌표계값이다.
-W 옵션은 해당 shp 파일의 인코딩 설정값이다. 기본 값은 UTF-8이고 shp 파일에 한글이 포함되어 있다면 cp949로 설정해 준다.
경로에 한글이 들어갈 경우 오류가 발생할 수 있다.
-U 옵션으로 계정을 지정해 준다.
-d 옵션으로 데이터베이스를 지정해 준다.
import가 성공적으로 완료된 후엔 COMMIT 명령문이 뜨는 걸 확인할 수 있다.
# psql로 import된 shp 파일 확인하기
import 후엔 shp 파일의 이름대로 테이블이 생성된다.
따라서 해당 shp 파일의 이름으로 테이블이 생성됐는지 조회를 해보자.
SELECT * FROM pg_tables WHERE TABLENAME = 'grid_pp_1km'; 를 실행하자.
해당 shp 파일의 내용을 조회해보자.
SELECT * FROM grid_pp_1km limit 1; 을 실행하면 shp 파일의 내용을 확인할 수 있다. (첫번째 row만 출력한다.)
# import 실패 시 체크해 봐야 할 사항
- CREATE EXTENSION postgis; 명령문으로 PostGIS 확장프로그램을 DB로 불러오지 않았다.
- 파일명이나 경로에 한글이 포함되어 있다.
- shp 파일에 한글이 포함되어 있는데, import시에 인코딩 옵션을 cp949로 하지 않았다.
(영문자와 숫자로 이루어진 shp파일은 euc-kr로 설정한다.)
'DB > PostgreSQL' 카테고리의 다른 글
shp2pgsql로 PostgreSQL에 대량의 shp 파일 import 하기 (0) | 2021.05.05 |
---|---|
윈도우서버에서 PostgreSQL 외부접속 가능하게 설정하는 방법 (0) | 2020.06.14 |
PostgreSQL 계정 생성, Role 추가하기(psql 이용) - 2 (4) | 2020.06.06 |
PostgreSQL 계정 생성, Role 추가하기(psql 이용) - 1 (0) | 2020.06.04 |
PostgreSQL 처음 접속하기(shell 스크립트 사용 vs. pgAdmin4 사용) (0) | 2020.06.04 |