2.1 Linux 패키지 설치 (PGDG 저장소)
PostgreSQL을 Linux에 설치하는 가장 표준적인 방법은 PGDG(PostgreSQL Global Development Group) 공식 저장소를 등록한 뒤 OS 패키지 매니저로 설치하는 것입니다. PGDG가 모든 주요 배포본에 대해 최신 메이저 버전·최신 마이너 버전을 제공하며, 같은 호스트에 여러 메이저 버전을 동시 설치할 수도 있습니다.
RHEL/Rocky 계열과 Debian/Ubuntu 계열을 각각 정리합니다.
왜 PGDG를 쓰는가
| 출처 | 장점 | 단점 |
|---|---|---|
OS 배포본 기본 저장소 (appstream, universe 등) | 의존성 정리됨 | PostgreSQL 버전이 OS 릴리스 시점에 고정. 최신 메이저 안 들어옴 |
| PGDG 저장소 | 최신 메이저/마이너, 한 호스트 다중 메이저 설치, 공식 지원 | 저장소 등록 한 단계 필요 |
| 소스 빌드 | 완전 제어 (다음 절 참고) | 컴파일·의존성 관리 책임 본인 |
컨테이너 (postgres:17 등) | 격리·재현성 | 운영 클러스터에서는 별도 운영 패턴 필요 |
OS 기본 저장소는 보통 PostgreSQL 1~2 메이저 뒤처져 있습니다. 운영용으로는 PGDG가 사실상 표준입니다.
RHEL / Rocky / Alma / CentOS Stream
PGDG는 https://download.postgresql.org/pub/repos/yum/에서 RPM을 배포합니다.
저장소 등록
# 1. PGDG repo RPM 설치 (한 번만, OS 메이저 버전 별로)
sudo dnf install -y \
https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# 2. OS가 제공하는 PostgreSQL 모듈 비활성화 (충돌 방지)
sudo dnf -qy module disable postgresqlEL-8·EL-9·EL-10용 repo RPM이 따로 있습니다. URL의 EL-9 부분을 OS 버전에 맞춰 바꿉니다.
postgresql17-server)과 OS 패키지명(postgresql-server)이 충돌합니다. module을 disable해야 PGDG 버전이 우선 설치됩니다.메이저 버전 설치
# 서버 + 클라이언트 + 라이브러리 + 추가 모듈
sudo dnf install -y \
postgresql17-server \
postgresql17 \
postgresql17-contrib
# (선택) 개발 헤더, devel 패키지 — 확장 빌드용
sudo dnf install -y postgresql17-devel설치되는 핵심 경로:
| 경로 | 내용 |
|---|---|
/usr/pgsql-17/bin/ | postgres, psql, pg_ctl, initdb, pg_dump 등 바이너리 |
/usr/pgsql-17/lib/ | 공유 라이브러리, 확장 .so |
/usr/pgsql-17/share/extension/ | 확장 메타데이터 (pg_partman.control 등) |
/var/lib/pgsql/17/data/ | 기본 PGDATA (initdb 전이라 비어 있음) |
/var/lib/pgsql/17/backups/ | 백업용 빈 디렉토리 |
/usr/lib/systemd/system/postgresql-17.service | systemd 서비스 유닛 |
클러스터 초기화 + 서비스 등록
# 1. 초기화 — initdb를 systemd 헬퍼로 호출
sudo /usr/pgsql-17/bin/postgresql-17-setup initdb
# 2. 부팅 시 자동 기동
sudo systemctl enable --now postgresql-17
# 3. 상태 확인
sudo systemctl status postgresql-17
ss -tlnp | grep 5432postgresql-17-setup initdb는 내부적으로 --data-checksums를 켜지 않습니다. 운영용으로 권장되므로 수동 호출하는 패턴도 흔합니다.
# 직접 initdb (체크섬 활성)
sudo -iu postgres \
/usr/pgsql-17/bin/initdb -D /var/lib/pgsql/17/data --data-checksums
sudo systemctl enable --now postgresql-17여러 메이저 동시 설치
PGDG 패키지는 버전 번호가 패키지명에 들어가 있어(postgresql16-server, postgresql17-server) 충돌 없이 공존합니다.
sudo dnf install -y postgresql16-server postgresql17-server
# 각 메이저는 별도 PGDATA·systemd 유닛·포트가 필요
# 16: /var/lib/pgsql/16/data + postgresql-16.service + port 5432
# 17: /var/lib/pgsql/17/data + postgresql-17.service + port 5433기본 포트가 둘 다 5432라서, 두 번째 클러스터의 postgresql.conf에서 port = 5433로 바꿔야 합니다.
Debian / Ubuntu
PGDG는 https://apt.postgresql.org/에서 deb를 배포합니다.
저장소 등록
# 1. 의존 도구
sudo apt-get install -y curl ca-certificates lsb-release
# 2. PGDG GPG 키와 repo 등록
sudo install -d /usr/share/postgresql-common/pgdg
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc \
https://www.postgresql.org/media/keys/ACCC4CF8.asc
# 3. apt 소스 추가 — codename 자동 감지
sudo sh -c 'echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] \
https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" \
> /etc/apt/sources.list.d/pgdg.list'
sudo apt-get update설치
# 서버 + 클라이언트
sudo apt-get install -y postgresql-17 postgresql-client-17
# (선택) 추가 모듈, 개발 헤더
sudo apt-get install -y postgresql-contrib-17 postgresql-server-dev-17Debian/Ubuntu PGDG 패키지는 설치 즉시 클러스터를 자동 생성합니다. RHEL과 다른 점입니다.
자동 생성되는 클러스터
| 항목 | 값 |
|---|---|
| 클러스터 이름 | main |
| PGDATA | /var/lib/postgresql/17/main/ |
| 설정 디렉토리 | /etc/postgresql/17/main/ (postgresql.conf 여기 있음) |
| 로그 | /var/log/postgresql/postgresql-17-main.log |
| systemd | postgresql@17-main.service, 그룹은 postgresql.service |
| 기본 포트 | 5432 (다음 클러스터부터 자동 증가) |
postgresql.conf가 PGDATA가 아닌 /etc/postgresql/<ver>/<cluster>/에 있는 점이 RHEL과 다릅니다. Debian/Ubuntu는 pg_ctlcluster·pg_lsclusters 같은 다중 클러스터 관리 도구를 제공합니다.
# 현재 클러스터 목록
pg_lsclusters
# Ver Cluster Port Status Owner Data directory Log file
# 17 main 5432 online postgres /var/lib/postgresql/17/main /var/log/postgresql/postgresql-17-main.log새 클러스터 만들기
# Debian: 같은 메이저로 두 번째 클러스터 (port 자동 5433)
sudo pg_createcluster 17 staging --start
pg_lsclusters
# Ver Cluster Port Status Owner Data directory Log file
# 17 main 5432 online postgres /var/lib/postgresql/17/main ...
# 17 staging 5433 online postgres /var/lib/postgresql/17/staging ...최소 한 줄 점검
설치 직후 클러스터가 정상인지 확인하는 한 줄.
sudo -u postgres psql -c "SELECT version(), current_setting('data_checksums');"출력 예:
version | current_setting
--------------------------------------------------------------------------------------------------------+-----------------
PostgreSQL 17.10 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.4.1, 64-bit | oncurrent_setting('data_checksums')이 off로 나오면 --data-checksums 없이 초기화된 클러스터입니다. 이후로는 변경할 수 없으므로 운영 시작 전에 결정해야 한다(자세한 내용은 1.2 initdb 절).
마이너 업그레이드
PGDG 저장소를 쓰면 마이너 패치는 dnf update / apt upgrade로 끝납니다.
# RHEL/Rocky
sudo dnf update postgresql17-server postgresql17
sudo systemctl restart postgresql-17
# Debian/Ubuntu
sudo apt-get update && sudo apt-get upgrade -y postgresql-17
sudo systemctl restart postgresql@17-main마이너 업그레이드는 PGDATA 호환 — 재초기화·재dump 없이 바이너리만 교체하면 됩니다. 메이저 업그레이드(17 → 18 등)는 별도 절차(Part XVIII 18.3 참고).
SELECT version() 확인 필수. 패키지가 업데이트됐는데 systemd가 옛 프로세스를 그대로 띄우고 있으면 보안 패치가 적용되지 않습니다. restart까지 확인합니다.정리
- 운영용 표준은 PGDG 저장소 + OS 패키지
- RHEL 계열: 모듈 disable →
postgresql17-server설치 →postgresql-17-setup initdb또는 수동initdb - Debian/Ubuntu: 저장소 등록 →
apt install postgresql-17시 자동으로main클러스터 생성 - 같은 호스트에 여러 메이저 버전 공존 가능 — 패키지명·systemd 유닛·PGDATA가 버전으로 분리됨
--data-checksums는 운영 시작 시점에 결정 (이후 변경 불가)- 마이너 업그레이드 = 패키지 업데이트 + restart, PGDATA 호환
다음 절(2.2)에서는 소스 빌드와 EDB·Postgres Pro·Pigsty 같은 다양한 배포본을 봅니다.