################################
##### PostgreSQL 15 버전 설치 #####
################################
# Rocky Linux 9.5에서 MariaDB와 PostgreSQL을 동시에 설치하고 운용하는 것은 완전히 가능
# 현재 설치된 PostgreSQL 버전 확인
dnf list installed | grep postgres
rpm -qa | grep postgres
# PostgreSQL 13 삭제
# sudo dnf remove 명령어로 하나씩 찾아서 삭제한다.
# PostgreSQL 13 데이터 디렉터리 제거 (선택 사항)
sudo rm -rf /var/lib/pgsql/13
# postgreSQL 15 저장소 추가
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
#기존 내장된 PostgreSQL 저장소 비활성화
sudo dnf -qy module disable postgresql
# PostgreSQL 15 설치
sudo dnf -y update
sudo dnf install -y postgresql15-server
# PostgreSQL 15 데이터베이스 구성 초기화
sudo postgresql-15-setup initdb
# PostgreSQL 15 실행 및 서비스 등록
sudo systemctl enable postgresql-15
sudo systemctl start postgresql-15
# PostgreSQL 상태 확인
sudo systemctl status postgresql-15
# PostgreSQL 15 확인 및 유지
/usr/pgsql-15/bin/psql --version
# PATH에 PostgreSQL 15 바이너리 추가 (권장)
echo 'export PATH=/usr/pgsql-15/bin:$PATH' >> ~/.bash_profile
source ~/.bash_profile
psql --version
#########################################################
# PostgreSQL 15 암호화 설정
# 1. postgres 사용자로 전환
sudo -i -u postgres
# 2. psql 실행
psql
# 3. 비밀번호 설정
\password
"postgres" 사용자의 새 암호:
# 특정 비밀번호로 직접 지정:
# ALTER USER postgres WITH PASSWORD '새비밀번호';
ALTER USER postgres WITH PASSWORD 'Wonderfull!!';
# 4. 종료
\q
# 변경 후 PostgreSQL 재시작: ==> 반드시 root 권한으로 접속된 상태에서 실행 가능
sudo systemctl restart postgresql-15
#######################################################################
# pgAdmin 4 Web 모드 설치 (Rocky Linux 9.5)
#######################################################################
# 1. 필수 패키지 설치
sudo dnf install -y yum-utils
# 2. pgAdmin 4 저장소 추가
sudo rpm -i https://ftp.postgresql.org/pub/pgadmin/pgadmin4/yum/pgadmin4-redhat-repo-2-1.noarch.rpm
# 3. 시스템 패키지 목록 업데이트
sudo dnf update -y
# 4. pgAdmin 4 설치
sudo dnf install -y pgadmin4
# 5. Apache 웹서버 시작 및 활성화
sudo systemctl enable httpd
sudo systemctl start httpd
# 6. pgAdmin 4 웹 모드 설정
sudo /usr/pgadmin4/bin/setup-web.sh
→ 웹 접속용 이메일/비밀번호 입력
이 명령을 실행하면 관리자 이메일과 비밀번호를 설정하라는 메시지가 나타납니다.
입력 후 Apache 웹서버가 자동으로 재시작됩니다.
# 7. 방화벽 설정 (HTTP 포트 80 허용)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
# 8. pgAdmin 4 접속
# 웹 브라우저에서 다음 주소로 접속하세요:
http://<서버 IP 또는 도메인>/
#######################################################################
####### 실제 적용 예제 ######
#######################################################################
sudo -i -u postgres
psql
-- DB 생성
create database malldb ENCODING 'UTF8';
\c malldb
-- 테이블 생성
CREATE TABLE members (
member_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
userID VARCHAR(60) NOT NULL UNIQUE,
userNM VARCHAR(30) NOT NULL,
access INTEGER NOT NULL DEFAULT 1,
access_failed_count INTEGER NOT NULL DEFAULT 0,
access_date TIMESTAMP NULL,
date DATE DEFAULT NULL,
regNO INTEGER NOT NULL DEFAULT 0,
admin INTEGER NOT NULL DEFAULT 0,
passwd VARCHAR(120) DEFAULT NULL,
email VARCHAR(60) DEFAULT NULL,
orgId INTEGER NOT NULL DEFAULT 0,
parent_id INTEGER NOT NULL DEFAULT 0,
codeID INTEGER NOT NULL DEFAULT 0,
telNO VARCHAR(16) DEFAULT NULL,
mobileNO VARCHAR(30) DEFAULT NULL,
workrole VARCHAR(200) DEFAULT NULL,
chosung VARCHAR(10) DEFAULT NULL,
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
phoneSE VARCHAR(80) DEFAULT NULL,
display INTEGER NOT NULL DEFAULT 1,
org_id INTEGER DEFAULT NULL
);
-- 주석 설정
COMMENT ON COLUMN members.access IS '접속상태';
COMMENT ON COLUMN members.access_failed_count IS '로그인실패횟수';
COMMENT ON COLUMN members.date IS '최근접속일자';
COMMENT ON COLUMN members.regNO IS '팀서열';
COMMENT ON COLUMN members.admin IS '관리자유무';
COMMENT ON COLUMN members.orgId IS '조직도ID';
COMMENT ON COLUMN members.parent_id IS '조직도 parent_id';
COMMENT ON COLUMN members.codeID IS '직위';
COMMENT ON COLUMN members.telNO IS '유선전화';
COMMENT ON COLUMN members.mobileNO IS '휴대폰번호';
COMMENT ON COLUMN members.workrole IS '담당업무';
COMMENT ON COLUMN members.chosung IS '초성';
COMMENT ON COLUMN members.reg_date IS '등록일자';
COMMENT ON COLUMN members.phoneSE IS 'deviceID';
-- 테이블 생성 확인
\dt
-- 특정 테이블 구조 보기
\d members
-- 해당 DB 접속
\c malldb
-- 인덱스 확인
\di members*
-- 인덱스 추가 (CREATE INDEX)
CREATE INDEX idx_userid ON members(userID);
-- 여러 칼럼 복합 인덱스
CREATE INDEX idx_userid_orgid ON members(userID, orgId);
-- 유니크 인덱스
CREATE UNIQUE INDEX idx_userid_unique ON members(userID);
-- 인덱스 삭제 (DROP INDEX)
-- 기본 문법
-- DROP INDEX index_name;
DROP INDEX idx_userid;
############################################################################
# 사용자 권한 부여
sudo -i -u postgres
psql
-- 1. 사용자 생성
CREATE USER codefox WITH PASSWORD 'Wonderfull!!';
-- 2. 특정 데이터베이스에 대한 모든 권한 부여 (예: malldb)
GRANT ALL PRIVILEGES ON DATABASE malldb TO codefox;
-- 3. (선택) 해당 데이터베이스의 모든 테이블, 시퀀스, 함수에 대한 권한 부여
-- DB를 처음 생성한 경우에는 필요 없지만, 이후 객체 생성 시엔 아래도 고려해야 합니다
\c malldb -- 해당 DB에 접속한 후 실행
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO codefox;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO codefox;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO codefox;
-- 4. (선택) 앞으로 생성되는 객체에도 권한 자동 부여
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO codefox;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO codefox;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON FUNCTIONS TO codefox;
-- 5. 빠져나오기
\q
exit
#######################################################################
# PATH 추가 (권장)
echo 'export PATH=/usr/pgsql-15/bin:$PATH' >> ~/.bash_profile
source ~/.bash_profile
# DB 백업
sudo -i -u postgres
pg_dump -U postgres -d malldb -F p -f malldb.sql
# 다운로드 받은 파일의 경로
cd /var/lib/pgsql/
#######################################################################