PostgreSQL 16과 Postgis 3.4 를 설치합니다. (운영체제: Linux Rocky 9.4)

1. PostgreSQL 16 설치

  • 설치 스크립트
# Install the repository RPM:
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# Disable the built-in PostgreSQL module:
sudo dnf -qy module disable postgresql

# Install PostgreSQL:
sudo dnf install -y postgresql16-server

# Optionally initialize the database and enable automatic start:
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
sudo systemctl enable postgresql-16
  • 계정 확인
# PostgreSQL 서버 설치할 때 PostgreSQL 관리 유저 postgres가 존재하지 않으면 자동 생성합니다.
# “id” 명령으로 존재 여부를 확인합니다.

id postgres
# password 설정 (postgres/postgres)
passwd postgres

2. 데이터 디렉토리 변경

  • 저같은 경우는 /home/postgres 경로에 data 디렉토리를 만들어 해당 디렉토리를 DB 데이터 디렉토리로 활용하고자 했습니다.
  1. postgresql config 파일 수정
vi  /var/lib/pgsql/16/data/postgresql.conf

-- 아래 부분 수정
data_directory = '/home/postgres/data'
  1. 폴더 동기화
rsync -av --progress /var/lib/pgsql/16/data /home/postgres
  1. 권한 부여
sudo chown -R postgres:postgres /home/postgres
sudo chmod 700 /home/postgres
  1. 서비스 수정
sudo systemctl edit postgresql-16

-- 아래 부분 수정 
[Service]
Environment=PGDATA=/home/postgres/data
  1. 수정사항 적용 및 PG 실행
sudo systemctl daemon-reload
sudo systemctl start postgresql-16
  1. 수정되었는지 확인
sudo -u postgres psql
postgres=# SHOW data_directory;
   data_directory    
---------------------
 /home/postgres/data
(1 row)
postgres=# SHOW config_file;
              config_file               
----------------------------------------
 /var/lib/pgsql/16/data/postgresql.conf
(1 row)
postgres=# SHOW hba_file;
              hba_file              
------------------------------------
 /var/lib/pgsql/16/data/pg_hba.conf
(1 row)

3. PostgreSQL 기동 명령어 정리

sudo systemctl start postgresql-16
sudo systemctl stop postgresql-16
sudo systemctl restart postgresql-16
sudo systemctl status postgresql-16

4. PostGIS 3.4 설치

sudo dnf install -y epel-release
sudo dnf config-manager --set-enabled crb
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/non-free/EL-9-x86_64/pgdg-redhat-nonfree-repo-latest.noarch.rpm
sudo dnf install -y postgis34_16 postgis34_16-client 

5. User, DB, Schema 생성 및 Postgis 적용

  • 아래같은 정보를 생성해보도록 합시다
  • database: dragon_db
  • username: dragony
  • pw: dragony1234
  • schema: dragon
  1. psql 접속
sudo -u postgres psql
  1. 계정 생성
  • 권한은 적절하게 부여하시면 됩니다. 저는 Superuser 권한을 부여했습니다.
postgres=# CREATE USER dragony;
CREATE ROLE
postgres=# SELECT * FROM PG_SHADOW;
   usename   | usesysid | usecreatedb | usesuper | userepl | usebypassrls | passwd | valuntil | useconfig 
-------------+----------+-------------+----------+---------+--------------+--------+----------+-----------
 postgres    |       10 | t           | t        | t       | t            |        |          | 
 dragony |    16388 | f           | f        | f       | f            |        |          | 
(2 rows)
postgres=# ALTER USER dragony PASSWORD 'dragony1234';
ALTER ROLE
postgres=# ALTER USER postgres PASSWORD 'postgres';
ALTER ROLE
postgres=# SELECT * FROM PG_SHADOW;
postgres=# ALTER USER dragony SUPERUSER;
ALTER ROLE
postgres=# \du
                              List of roles
  Role name  |                         Attributes                         
-------------+------------------------------------------------------------
 dragony | Superuser
 postgres    | Superuser, Create role, Create DB, Replication, Bypass RLS

  1. 데이터베이스 생성
postgres=# CREATE DATABASE dragon_db OWNER dragony;
CREATE DATABASE
# 확인
postgres=# \l
# 혹은
postgres=# SELECT * FROM pg_database;

  1. 스키마 생성
# 위에서 만든 dragon_db 사용 
postgres=# \c dragon_db
dragon_db=# CREATE SCHEMA dragon AUTHORIZATION dragony;
CREATE SCHEMA
dragon_db=# GRANT USAGE ON SCHEMA dragon TO dragony;
GRANT
dragon_db=# \dn+

# 확인
\dn 
# 혹은 + 붙이면 스키마의 기본 정보에 추가된 액세스 권한을 포함하여 조회할 수 있다.
\dn+

  1. timezone 셋팅
  • Asia/Seoul 로 셋팅했습니다.
dragon_db=# SET TIME ZONE 'Asia/Seoul';
SET
dragon_db=# show timezone;
  TimeZone  
------------
 Asia/Seoul
(1 row)

5. Postgis 설치
postgres=# \c dragon_db
dragon_db=# CREATE EXTENSION postgis;
dragon_db=# CREATE EXTENSION postgis_topology;
dragon_db=# CREATE EXTENSION postgis_sfcgal;
dragon_db=# CREATE EXTENSION fuzzystrmatch;
dragon_db=# CREATE EXTENSION address_standardizer;
dragon_db=# CREATE EXTENSION address_standardizer_data_us;
dragon_db=# CREATE EXTENSION postgis_tiger_geocoder;
dragon_db=# SELECT PostGIS_version();

6. 방화벽 설정

  • 혹시 외부에서도 접근이 필요하다면 Postgresql 설정 파일을 변경합니다.
  1. postgresql.conf 수정
vi /var/lib/pgsql/16/data/postgresql.conf
# 설정 파일에서 아래와 같이 변경
# listen_addresses = 'localhost' -> 주석으로 되어있음
listen_addresses = '*'

  1. pg_hba.conf 수정
vi /var/lib/pgsql/16/data/pg_hba.conf
host    all             all             0.0.0.0/0          md5
  • 만약 특정 대역대에서만 접속을 허용하고 싶다면 0.0.0.0/0 을 허용하고 싶은 대역으로 변경하시면 됩니다.

  1. 리눅스 방화벽이 켜져있다면 PostgreSQL이 Listen중인 5432 포트도 열어줍니다.
firewall-cmd --permanent --zone=public --add-port=5432/tcp
firewall-cmd --reload
  • 만약 특정 대역대에서만 접속을 허용하고 싶다면 아래처럼 해주시면 됩니다.
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="<IP 대역>" port protocol="tcp" port="5432" accept' --permanent
firewall-cmd --reload

  1. DB 재기동 합니다.
sudo systemctl restart postgresql-16


profile
안녕하세요 :) 제 개인 공부 정리 블로그입니다. 틀린 내용 수정, 피드백 환영합니다.

0개의 댓글