본문으로 건너뛰기
2.1 Linux 패키지 설치 (PGDG 저장소)

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 postgresql

EL-8·EL-9·EL-10용 repo RPM이 따로 있습니다. URL의 EL-9 부분을 OS 버전에 맞춰 바꿉니다.

왜 module disable이 필요한가: RHEL 8+는 PostgreSQL을 dnf module로 제공하는데, PGDG 패키지명(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.servicesystemd 서비스 유닛

클러스터 초기화 + 서비스 등록

# 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 5432

postgresql-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-17

Debian/Ubuntu PGDG 패키지는 설치 즉시 클러스터를 자동 생성합니다. RHEL과 다른 점입니다.

자동 생성되는 클러스터

항목
클러스터 이름main
PGDATA/var/lib/postgresql/17/main/
설정 디렉토리/etc/postgresql/17/main/ (postgresql.conf 여기 있음)
로그/var/log/postgresql/postgresql-17-main.log
systemdpostgresql@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                          | on

current_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 같은 다양한 배포본을 봅니다.