- Published on
PostGIS확장하기(Docker기반)
- Authors
- Name
- hongreat
- ✉️hongreat95@gmail.com
Docker를 이용한 Postgresql DB 생성부터 PostGIS 를 확장(설치) 하는 방법입니다.
PostGIS는 Postgresql 의 extension 이므로, DB가 먼저 필요합니다.
저는 관리와 유지가 용이하기 때문에 로컬,배포 환경모두 docker 를 이용하는 편 입니다.
도커 스크립트로 간편하게 DB(Database)를 만들 수 있습니다.
1. Docker로 PostgreSQL 생성하기
- Docker가 데이터베이스 배포를 위해 독립된 환경을 만드는 데 어떻게 사용되는지 소개합니다.
- 아직 설치되지 않았다면 아래 링크에서 설치할 수 있습니다.
1.1 기본 실행방법
postgres 이미지를 가져오고, 바로 실행이 가능합니다.
여기에는 POSTGRES_PASSWORD
와 같은 환경 변수 설정이 포함됩니다.
docker pull postgres docker run --name some-postgres -e POSTGRES_PASSWORD=password -d postgres
1.2 상세한 환경변수 설정 및 팁
아래처럼 환경변수를 다양하게 세팅할 수 있습니다.
docker run -d \
--name postgis -p 5432:5432 -h postgres -e POSTGRES_USER=postgres -e POSTGRES_DB=postgis_db \
-e POSTGRES_PASSWORD=postgres123 \
-e PGDATA=/var/lib/postgresql/data/pgdata \
postgres
docker run
: Docker 컨테이너를 시작하고 실행하는 데 사용되는 기본 명령입니다.d
: 백그라운드에서 실행하도록 합니다. 'detached' 의 의미입니다. 터미널이 컨테이너 실행에 바인딩되지 않고, 컨테이너가 백그라운드에서 독립적으로 실행됩니다. 로그를 직접 볼 수 없는 상태가 되겠죠.-name some-postgres
: 생성될 컨테이너에some-postgres
라는 이름을 할당합니다.p 5432:5432
: 포트 매핑을 정의합니다. 호스트 시스템의 5432 포트를 컨테이너의 5432 포트에 연결합니다. PostgreSQL의 기본 포트는 5432이며, 이를 통해 호스트 시스템에서 컨테이너의 PostgreSQL 서버에 접근할 수 있습니다.h postgres
: 컨테이너의 호스트네임을postgres
로 설정합니다.e POSTGRES_USER=some-user
: PostgreSQL의 사용자 이름을some-user
로 지정합니다.e POSTGRES_DB=some-db
: PostgreSQL 내에some-db
라는 이름의 데이터베이스로 지정합니다.e POSTGRES_PASSWORD=some-password
: PostgreSQL 사용자의 비밀번호를some-password
로 설정합니다. 데이터베이스 보안을 위해 실제 사용 환경에서는 더 강력한 비밀번호를 사용해야 합니다.e PGDATA=/var/lib/postgresql/data/pgdata
: PostgreSQL 데이터 파일이 저장될 경로를 설정합니다. 이 경로는 컨테이너 내에서 데이터베이스 파일을 저장하는 데 사용됩니다.
1.2.1 포트매핑 작동 방식
- 외부의 어떤 시스템이 호스트 시스템의 IP 주소와 5432 포트(앞 부분)를 사용하여 연결을 시도하면,Docker는 이 연결 요청을 컨테이너 내부의 5432 포트(뒤 부분)로 전달합니다.
- 결과적으로, 외부에서 호스트 시스템의 5432 포트로 들어온 요청은 컨테이너 내의 PostgreSQL 서비스에 도달하게 됩니다.
1.3 컨테이너의 데이터베이스로 진입
아래 명령어로 진입합니다.
docker exec -it some-postgres /bin/bash
정상적으로 진입되었다면 root@postgres:/# 이 뜨게됩니다.
2. psql 로 접속하고 자주쓰는 명령어 정리하기
2.1 psql 접속
psql 명령어로 데이터베이스에 접속합니다.
psql -U postgres -d postgis_db
U postgres
:U
플래그는 사용할 데이터베이스 사용자를 지정합니다. 여기서postgres
는 사용자 이름입니다.d postgis_db
:d
플래그는 접속할 데이터베이스를 지정합니다. 여기서postgis_db
는 데이터베이스의 이름입니다.
db명=# 으로 표기되면 정상적으로 접속이 된 것 입니다.
2.2 관련 명령어
자주사용하는 명령어들 입니다.
명령어 | 설명 |
---|---|
\l 또는 \list | 설치된 모든 데이터베이스의 목록을 보여줍니다. |
\dt | 현재 데이터베이스에 있는 모든 테이블을 보여줍니다. |
\dn | 현재 데이터베이스의 모든 스키마를 보여줍니다. |
\d [테이블 이름] | 지정된 테이블의 열, 타입, 기본값, 키 제약 조건 등을 보여줍니다. |
SQL 명령 | 일반 SQL 명령 (예: SELECT * FROM table_name;)을 입력하여 실행합니다. |
\conninfo | 현재 데이터베이스 서버의 연결 정보를 보여줍니다. |
\c [데이터베이스 이름] | 다른 데이터베이스로 접속을 전환합니다. |
? | psql에서 사용 가능한 명령어들의 목록과 설명을 보여줍니다. |
\h | SQL 명령어에 대한 도움말을 보여줍니다. 특정 SQL 명령어에 대한 도움말을 보려면 \h [명령어] 형식을 사용합니다. |
3. PostGIS extension 생성
3.1 PostGIS 확장 명령어
아래 명령어로 PostGIS 를 확장할 수 있습니다.
CREATE EXTENSION postgis;
3.1.1 ERROR: extension "postgis" is not available
ERROR: extension "postgis" is not available 는 시스템단에서 postgis 패키지가 설치되어 있지 않기 때문에 발생합니다.
ERROR: extension "postgis" is not available
DETAIL: Could not open extension control file "/usr/share/postgresql/15/extension/postgis.control": No such file or directory.
HINT: The extension must first be installed on the system where PostgreSQL is running.
3.1.2 postgis OS패키지 설치
exit 명령어로 DB에서 나온뒤 아래 명령어를 입력합니다.
apt-get update
apt-get install -y postgis
postgis를 설치합니다.
3.1.3 정상설치
CREATE EXTENSION
이라 나오면 정상적으로 설치 된 것 입니다.
4. extension 이 작동하는 원리
PostgreSQL은 다양한 확장을 지원하는 모듈식 아키텍처를 가지고 있습니다.
이 아키텍처는 사용자가 필요에 따라 추가 기능을 데이터베이스에 '플러그인' 형식으로 추가할 수 있게 해줍니다.
CREATE EXTENSION
명령은 PostgreSQL에 내장된 확장 관리 시스템을 통해 실행됩니다.- PostgreSQL은 해당 확장과 관련된 SQL 파일, 라이브러리, 데이터 파일 등을 데이터베이스 시스템에 로드합니다.