이전에 QGIS로 만든 SHP파일을 이제 PostgreSQL에 DB화 하는 것을 알아보겠습니다.
PostgreSQL 설치
먼저 PostgreSQL을 설치해줍니다.
www.enterprisedb.com/downloads/postgres-postgresql-downloads
Download PostgreSQL Database for Windows, Linux and MacOS & 32-bit or 64-bit Versions | EDB
Download PostgreSQL packages or installers free from EDB. Get PostgreSQL for Windows, Linux and MacOS platforms. Download 32-bit or 64-bit versions. Download open-source PostgreSQL now.
www.enterprisedb.com
여기서 12.4버전 이하를 깔아주셔야 합니다. 아직까지 13버전에서는 Postgis를 지원하지 않습니다.(2020년 10월 기준)
![[PostgreSQL] SHP파일을 POSTGIS로 PostgreSQL에 DB화 하기 0](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
POSTGIS 설치
PostgreSQL을 깔으셨다면 POSTGIS를 깔아줄 차례입니다.
먼저 PostgreSQL과 같이 깔린 Stack Builder를 실행해주고 PostgreSQL12(x64)... 를 선택해 주고 next를 누릅니다.
![[PostgreSQL] SHP파일을 POSTGIS로 PostgreSQL에 DB화 하기 1](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
그다음 Spatial Extension의 PostGIS 3.0 을 선택해 주시고 next를 눌러 설치해주시면 되겠습니다.
![[PostgreSQL] SHP파일을 POSTGIS로 PostgreSQL에 DB화 하기 2](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
PostgreSQL에 DB만들기
postgreSQL을 실행한 후 공간데이터를 담을 Databases를 만들어 줍니다.
Databases 카테고리를 우클릭한다음 Create->Database.. 를 누르고 DB이름을 설정하고 DB를 만들어줍니다.
![[PostgreSQL] SHP파일을 POSTGIS로 PostgreSQL에 DB화 하기 3](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
![[PostgreSQL] SHP파일을 POSTGIS로 PostgreSQL에 DB화 하기 4](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
데이터베이스가 만들어졌습니다. 이제 PostGIS 확장 모듈을 데이터베이스 안에 불러옵니다.
SQL 쿼리 빌더로 명령문을 적어보겠습니다. DB명을 우클릭 후 Query Tool을 선택합니다.
![[PostgreSQL] SHP파일을 POSTGIS로 PostgreSQL에 DB화 하기 5](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
그리고 PostGIS 확장 모듈을 로드하기 위해 다음과 같은 코드를 실행합니다..(F5를 눌러 실행)
create extension postgis;
Create Extension이라고 뜨면 성공입니다.
![[PostgreSQL] SHP파일을 POSTGIS로 PostgreSQL에 DB화 하기 6](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
POSTGIS를 이용하여 SHP파일을 DB화 하기
postgis를 실행합니다.
![[PostgreSQL] SHP파일을 POSTGIS로 PostgreSQL에 DB화 하기 7](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
먼저 POSTGIS를 PostgreSQL과 연결해주어야합니다.
View connection details를 누르고 username, password, database를 입력합니다.
Username은 postgres가 기본이며, 비밀번호는 postgresql비밀번호고 Database는 아까 만들었던 DB명을 입력하면됩니다.
![[PostgreSQL] SHP파일을 POSTGIS로 PostgreSQL에 DB화 하기 8](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
![[PostgreSQL] SHP파일을 POSTGIS로 PostgreSQL에 DB화 하기 9](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
Add File 버튼을 누르면 다음과 같은 화면이 뜹니다.
여기서 SHP파일과 DBF파일을 각각 열어줍니다. 둘중에 하나라도 없으면 에러가 날 수 있으니 꼭 두개 업로드 해야합니다.
![[PostgreSQL] SHP파일을 POSTGIS로 PostgreSQL에 DB화 하기 10](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
![[PostgreSQL] SHP파일을 POSTGIS로 PostgreSQL에 DB화 하기 11](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
이제 SRID코드를 입력해주어야 합니다.
SRID란 공간 참조 식별자(Spatial Reference Identifier)라고 하며 데이터의 지리적 좌표계와 투영법에 대한 정보를 구분해 주는 유일한 식별 코드입니다.
먼저 SHP파일을 만들때 pri라는 파일도 만들어졌을겁니다.
![[PostgreSQL] SHP파일을 POSTGIS로 PostgreSQL에 DB화 하기 12](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
이 Prj파일을 메모장으로 열어줍니다.
![[PostgreSQL] SHP파일을 POSTGIS로 PostgreSQL에 DB화 하기 13](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
이파일에 젹혀 있는 문자열을 복사하고 하단에 있는 사이트로 들어갑니다.
developers.arcgis.com/javascript/3/jshelp/gcs.html
Coordinate Systems
developers.arcgis.com
여기서 아까 복사한 문장을 ctrl+f를 이용해 찾아준다면 왼쪽에 숫자가 하나 있습니다. 그것이 공간데이터의 SRID코드입니다.
![[PostgreSQL] SHP파일을 POSTGIS로 PostgreSQL에 DB화 하기 14](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
다시 POSTGIS로 돌아와서 각 파일마다 SRID코드를 입력해줍니다.
![[PostgreSQL] SHP파일을 POSTGIS로 PostgreSQL에 DB화 하기 15](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
그리고 Options를 눌러 체크되있는 것을 모두 해제해줍니다.(오류가 발생될 수 있습니다.)
![[PostgreSQL] SHP파일을 POSTGIS로 PostgreSQL에 DB화 하기 16](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
이제 IMPORT 버튼을 눌러 PostgreSQL에 공간데이터를 넣어줍니다.
![[PostgreSQL] SHP파일을 POSTGIS로 PostgreSQL에 DB화 하기 17](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
만약 다음과 같은 encoding 오류가 뜬다면 Options에서 UTF-8을 CP949나 EUC-KR로 바꾸어서 진행해보시기 바랍니다.
![[PostgreSQL] SHP파일을 POSTGIS로 PostgreSQL에 DB화 하기 18](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
완료되면 릴레이션이 이미 있다는 오류가 뜰텐데요, 실제로 이미 있었다면 오류가 났었겠지만 처음 만드는것이라면 무시하셔도 되는 오류입니다.
![[PostgreSQL] SHP파일을 POSTGIS로 PostgreSQL에 DB화 하기 19](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
SELECT문을 실행해보니 데이터가 잘 들어갔음을 확인할 수 있습니다.
![[PostgreSQL] SHP파일을 POSTGIS로 PostgreSQL에 DB화 하기 20](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
'SQL & DB > PostgreSQL' 카테고리의 다른 글
[PostgreSQL] 값 비교(CASE, SIGN, GREATEST, LEAST), 평균값 구하기 (0) | 2021.01.07 |
---|---|
[PostgreSQL] NULL값 처리 (COALESCE, NULLIF) (0) | 2021.01.07 |
[PostgreSQL] 날짜 다루기(CURRENT_DATE, CURRENT_TIMESTAMP, CAST, EXTRACT) (0) | 2021.01.06 |
[PostgreSQL] 문자열 다루기(추출/ 분해 / 합치기) (substring, split_part, concat) (0) | 2021.01.06 |
[PostgreSQL] Create / Insert / Select (0) | 2021.01.06 |