PostgreSQL 16과 Postgis 3.4 를 설치합니다. (운영체제: Linux Rocky 9.4)
# 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
vi /var/lib/pgsql/16/data/postgresql.conf
-- 아래 부분 수정
data_directory = '/home/postgres/data'
rsync -av --progress /var/lib/pgsql/16/data /home/postgres
sudo chown -R postgres:postgres /home/postgres
sudo chmod 700 /home/postgres
sudo systemctl edit postgresql-16
-- 아래 부분 수정
[Service]
Environment=PGDATA=/home/postgres/data
sudo systemctl daemon-reload
sudo systemctl start postgresql-16
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)
sudo systemctl start postgresql-16
sudo systemctl stop postgresql-16
sudo systemctl restart postgresql-16
sudo systemctl status postgresql-16
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
sudo -u postgres psql
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
postgres=# CREATE DATABASE dragon_db OWNER dragony;
CREATE DATABASE
# 확인
postgres=# \l
# 혹은
postgres=# SELECT * FROM pg_database;
# 위에서 만든 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+
dragon_db=# SET TIME ZONE 'Asia/Seoul';
SET
dragon_db=# show timezone;
TimeZone
------------
Asia/Seoul
(1 row)
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();
vi /var/lib/pgsql/16/data/postgresql.conf
# 설정 파일에서 아래와 같이 변경
# listen_addresses = 'localhost' -> 주석으로 되어있음
listen_addresses = '*'
vi /var/lib/pgsql/16/data/pg_hba.conf
host all all 0.0.0.0/0 md5
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
sudo systemctl restart postgresql-16