이번엔 shapefile을 postgresql table로 바꾸는 작업을 해보겠다.
전에 쓰던 방법은 gdal을 활용하여 shapefile을 db table로 컨버팅을 한 적이 있다.
하지만 용량이 조금이라도 클 경우 예를 들어 100MB 이상에 속성까지 30만 레코드 정도가 있다면
상당시간 소요됐던 기억이 있다. gdal options 중에 그나마 빠르게 해주는 옵션이 있지만 그렇게 차이는 많이 나지 않았다.
shp2pgsql은 레코드를 insert 작업을 통해 테이블에 데이터를 추가하는 경우도 있고 옵션 값 -D를 주면 테이블을 insert하지 않고
덤프로 Copy한다고 명시되어있다. 정확히 어떻게 shapefile이 카피되어서 데이터베이스 테이블로 변환되는지 자세히 알고 계신 분은
링크나 설명 댓글로 부탁드립니다.ㅜ
shp2pgsql에 대한 옵션 값들은 아래 링크를 참조하면 된다.
www.bostongis.com/pgsql2shp_shp2pgsql_quickguide.bqg
이제 본격적으로 어떻게 사용하면 되는지 자세히 알아보도록 하자.
일단 테스트는 원격접속으로 진행했었다.
1. 자동 로그인으로 해야할 경우(pgpass.conf 설정)
-postgis 설정 경로에 pgpass.conf 파일을 생성한다.
-pgpass.conf에 다음과 같이 입력한 후 저장한다.
- localhost:port:database:user:password
호스트:포트:데이터베이스:유저:패스워드 순으로 입력 후 저장한다.
2.설정이 끝나면 cmd 창을 열고 아래와 같이 명령어를 입력한다.
cmd> shp2pgsql -D -s 4326 -W euckr shp파일 경로 schema.tablename | psql -h 호스트 -U 유저 -p 포트
옵션
-D dump 옵션
-s 좌표계
-W dbf파일에 한글이 있을 경우 인코딩
*pgpass.conf 를 설정하지 않을 경우
- cmd> shp2pgsql -D -s 4326 -W euckr shp파일 경로 schema.tablename | psql -h 호스트 -U 유저 -p 포트
- 똑같이 입력 후 비밀번호를 입력하면 된다.
이렇게 하면 gdal 또는 geotools 소스 코드로도 shapefile을 컨버팅할 수 있지만
shp2pgsql의 -D 옵션은 데이터가 큰 경우 유용한것 같다.
*참조) java geotools to postgis 컨버트
spatiumwdev.tistory.com/entry/Geotools-shapefile-PostGis-데이터로-바꾸기
'database > Postgresql' 카테고리의 다른 글
Postgresql 공간 쿼리 - envelope 구하기 (st_envelope), spatial query (0) | 2021.06.29 |
---|---|
우분투 postgis database 설치하기 (0) | 2021.06.06 |
shp2pgsql dimension 옵션과 geotools로 dimension 확인 (0) | 2021.05.25 |
pgsql2shp 을 활용해서 table을 shp파일 만들기 예제 (0) | 2021.04.20 |