PostgreSQL 버전정책
1. PostgreSQL 릴리즈 정책
PostgreSQL은 매년 한 번씩 Major버전을 릴리즈합니다. Major버전 릴리즈는 일반적으로 새로운 기능이 포함되며, 시스템 테이블과 Data 파일의 내부형식(내부스토리지 구성, 디스크포맷)의 변경이 있을 수 있습니다. 이로인해 서로 다른 Major버전간에는 내부 아키텍처 변경으로 인해 호환되지 않습니다.(정확히 호환성을 유지하지 않으며, 보장하지 않습니다.) 예를들어 WAL File을 PostgreSQL 9.6까지는 pg_xlog 디렉토리에 저장했지만, PostgreSQL 10부터는 pg_wal 디렉토리에 저장합니다.
Minor버전 릴리즈는 자주 발생하는 버그, 보안 문제 및 Data 손상 문제만 수정된 내용을 제공합니다. 따라서 내부 아키텍처 변경은 없으며, 동일 Major 버전에서 Minor 버전간의 호환성은 유지됩니다.
새로 릴리즈된 Major버전에 대해서는 최초 릴리즈 후 5년간 Minor버전 릴리즈를 지원합니다. 5년이 지난 후에는 end-of-life(EOL)로 더 이상 지원을 하지 않습니다.
2. PostgreSQL 릴리즈 현황 (기준 : 2023-11-23)
본 문서를 작성한 일자 기준으로 PostgreSQL 9.6은 EOL이 상태이며, PostgreSQL 10은 EOL 대상입니다. 또한 PostgreSQL 11부터는 32Bit를 지원하지 않습니다.
Major Version | Current Minor Version | Supported | First Release | Final Release | 비고 |
9.6 | 9.6.24 | NO (EOL) | 2016-09-29 | 2021-11-11 | ㅤ |
10 | 10.23 | NO (EOL) | 2017-10-05 | 2022-11-10 | ㅤ |
11 | 11.22 | YES | 2018-10-18 | 2023-11-09 | 32Bit 미지원 |
12 | 12.17 | YES | 2019-10-03 | 2024-11-14 | 32Bit 미지원 |
13 | 13.13 | YES | 2020-09-24 | 2025-11-13 | 32Bit 미지원 |
14 | 14.10 | YES | 2021-09-30 | 2026-11-12 | 32Bit 미지원 |
15 | 15.5 | YES | 2022-10-13 | 2027-11-11 | 32Bit 미지원 |
16 | 16.1 | YES | 2023-09-14 | 2028-11-09 | 32Bit 미지원 |
3. PostgreSQL 버전표기
PostgreSQL 10 전후로 버전표기법이 변경 되었습니다.
- PostgreSQL 9.6 이하
PostgreSQL 9.6 이하에서는 9.6.24와 같이 점(.)을 기준으로 세자리로 표기합니다. 앞에 두자리 수는 Major버전을 의미하고, 세번째 자리 수는 Minor버전을 의미합니다.
Major버전 : 9.6 Minor버전 : 24
- PostgreSQL 10 이상
PostgreSQL 10버전 부터는 10.21과 같이 점(.)을 기준으로 버전을 두자리로 표기합니다. 첫번째 자리 수는 Major버전을 의미하고, 두번째 자리 수는 Minor버전을 의미합니다.
Major버전 : 10 Minor버전 : 21
PostgreSQL Upgrade Overview
PostgreSQL의 신규 기능들을 사용하기 위해서, 혹은 EOL 등의 이유로 PostgreSQL 업그레이드를 고려할 수 있습니다. PostgreSQL은 기본적으로
pg_dump, pg_restore, pg_upgrade 명령어 등을 통해 버전 업그레이드를 수행 할 수 있지만, 업그레이드 작업 이외에도 Configuration 설정과 VACUUM 과 같은 부가적인 작업이 필요할 수 있습니다.사용하고자 하는 PostgreSQL의 버전에 따라 Minor버전 업그레이드를 하는 경우와 Major버전 업그레이드를 하는 경우가 있습니다. 본 문서에서는 PostgreSQL 업그레이드에 대한 개략적인 설명만 하며, 자세한 업그레이드 방법 및 과정은 별도로 다룹니다.
1. PostgreSQL Minor 업그레이드

Minor버전 업그레이드의 경우, Major버전이 동일하여 내부 아키텍처 변화가 없기 때문에 새로운 Minor버전을 설치한 후 기존에 사용중이던 Data 파일(PGDATA) 경로를 사용하여 PostgreSQL Server를 구동하면 됩니다.
2. PostgreSQL Major 업그레이드

Major버전 업그레이드의 경우 시스템 테이블과 Data 파일의 내부 아키텍처의 변화에 따라 버전 간의 호환성이 유지되지 않습니다. 따라서 Major버전 업그레이드는 Database Dump/Restore또는 pg_upgrade 명령어를 통한 업그레이드를 수행해야 합니다. 이러한 작업은 Minor버전 업그레이드보다 더 많은 작업시간과 서비스 중지 시간이 필요할 수 있습니다.
PostgreSQL 응용프로그램
PostgreSQL 설치 시 PostgreSQL Server 이외에 여러 응용프로그램이 같이 설치됩니다. OS 종류 및 Major 버전에 따라 응용프로그램의 종류가 다릅니다. 아래는 CentOS / PostgreSQL 14에 대한 응용프로그램의 종류입니다.
PostgreSQL 응용프로그램 (CentOS / PostgreSQL 14)
Utility | 설명 |
clusterdb | Database의 테이블을 Re-Clustering |
createdb | Database 생성 |
createuser | 사용자(Role) 생성 |
dropdb | Database 제거 |
dropuser | 사용자(Role) 제거 |
initdb | Database Cluster 생성 |
pg_archivecleanup | WAL Archive 파일 정리 |
pg_basebackup | Cluster 기본 Backup |
pg_checksums | Database Cluster에서 데이터 체크섬 활성화, 비활성화 또는 확인 |
pg_config | PostgreSQL 버전에 대한 정보 검색 |
pg_controldata | Database Cluster의 제어 정보 표시 |
pg_ctl | PostgreSQL Server 제어(초기화, 시작, 중지 등) |
pg_dump | Database Backup |
pg_dumpall | Database Cluster Backup |
pg_isready | PostgreSQL Server 연결 상태 확인 |
pg_receivewal | Cluster에서 WAL을 스트리밍하는데 사용 |
pg_resetwal | WAL 및 Cluster의 기타 제어 정보를 재설정 |
pg_restore | pg_dump에 의해 생성된 아카이브 파일에서 Database Restore |
pg_rewind | Data Directory를 다른 Data Directory와 동기화 |
pg_test_fsync | 시스템에서 가장 빠른 wal_sync_method를 제공 |
pg_test_timing | 타이밍 오버헤드 측정 |
pg_upgrade | PostgreSQL Server 업그레이드(Major) |
pg_verifybackup | pg_basebackup을 사용한 기본Backup에 대한 무결성 확인 |
pg_waldump | WAL을 사람이 읽을 수 있는 형태로 표시 |
pgbench | 벤치마크 테스트 |
postgres | PostgreSQL Database Server |
postmaster | postgres의 별칭(더 이상 사용되지 않음) |
psql | Command-Line Terminal |
reindexdb | Database Index Re-Indexing |
vacuumdb | Database vacuum |
📢 본 문서에서는 위에 나열된 응용프로그램 종류 중 Backup, Restore, Upgrade에 대한 응용프로그램의 설명 및 사용법을 다룹니다. (
pd_dump, pg_dumpall, pg_restore, pg_upgrade, initdb)1. pg_dump
pg_dump는 Database Backup을 위한 것으로, PostgreSQL Database를 스크립트 파일 또는 Archive 파일로 추출합니다. pg_dump는 하나의 Database에 대해서만 Backup을 수행하며, 여러 Database로 구성된 Cluster에 대한 Backup은 다음에 설명할 pg_dumpall을 사용해야 합니다.스크립트로 추출된 파일은 Database를 재구성할 수 있는 SQL 명령이 포함된 일반 텍스트 파일입니다.(Plain-Text Format) 이 파일을 psql을 통해 다른 버전의 PostgreSQL에 Restore 할 수 있습니다. 또한, 옵션을 통해 다른 DBMS로 Restore 가능한 형식으로 생성가능합니다.
Archive File은 다른 DBMS로의 Restore는 불가능하지만,
pg_restore를 통해서 다른 PostgreSQL Database로 빠르게 Restore 할 수 있는 Backup Format 입니다.- pg_dump Format 형식
Format | 출력 | 특징 |
Plain-Text | 스크립트파일 | SQL 명령문 형태로 출력. 다른 DBMS로 이식 가능 |
Custom | Archive 파일 | 기본적으로 압축지원 |
Directory | Archive 파일 | 기본적으로 압축지원, Parallel Backup 가능 |
Tar | Archive 파일 | tar 형식으로 Backup 파일생성 |
📢 스크립트파일 : SQL 명령이 포함된 일반 텍스트 파일로 사람이 해석, 변경 가능
Archive파일 : 일종의 바이너리 형태의 파일로 사람이 해석, 변경 불가능
pg_dump 특징
- ROLE, Tablespace에 대한 Backup은 불가능
- 증분Backup 불가능
- 스크립트파일은 psql, Archive File은 pg_restore에 의해 Restore 가능
- Backup 파일에 대한 압축지원(Custom, Directory Format)
- Parallel Backup 지원(단, Format을 Directory 설정시에만 가능)
Syntax Example
pg_dump Option
Database Backup(-d옵션)
특정 Schema만 Backup(-n옵션)
특정 Schema를 제외하고 Backup(-N옵션)
특정 Table만 Backup(-t옵션)
Custom Format Backup(-Fc옵션)
Directory Format, Parallel Backup (-Fd, -j옵션)
2. pg_dumpall
pg_dumpall은 PostgreSQL의 전체 Database Cluster에 대한 Backup을 수행합니다. pg_dumpall은 전체 Database의 테이블을 읽기 때문에 pg_dumpall 수행 시 superuser로 접속해야 합니다. pg_dumpall 수행으로 생성된 스크립트 파일은 psql로 수행할 수 있는 Plain-Text Format의 SQL 명령문으로 만들어 지며, Restore 시 Role, Database 생성등을 위해 superuser로 수행해야 합니다.pg_dumpall 특징
- ROLE, Tablespace에 대한 Backup 가능
psql에 의해서만 Restore 가능
- Backup 파일에 대한 압축 지원 하지 않음
- 모든 Database를 차례로 단일 스크립트 파일로 생성하므로, Parallel Backup과 Parallel Restore를 할 수 없음
Syntax Example
pg_dumpall Option
Database Cluster Backup
테이블스페이스만 Backup(-t옵션)
3. pg_restore
pg_restore는 pg_dump가 생성한 Dump File에서 PostgreSQL Database를 Restore할 수 있는 응용프로그램 입니다. Dump를 수행한 시점의 Database 상태로 재구성하는데 필요한 명령을 수행합니다. Custom Format, Directory Format, Tar Format으로 생성된 Dump File에 대해서 pg_restore를 사용할 수 있습니다.Syntax Example
pg_restore Option
특정 Database 존재하지 않는 상태에서 Restore
특정 Database 존재하는 상태에서 Restore
Directory Format, Parallel Restore (-Fd, -j옵션)
4. pg_upgrade
pg_upgrade 응용프로그램을 통해 PostgreSQL Major버전 업그레이드를 할 수 있습니다. Major버전 업그레이드 시에만 사용되며, Minor버전 업그레이드시에는 필요하지 않습니다.pg_upgrade 특징
- pg_upgrade 내부적으로 pg_dump와 pg_restore 수행. 따라서 pg_upgrade 수행을 위해서는 충분한 디스크 공간 필요
- Database 크기가 크다면, 업그레이드 많은 소요시간 필요
- Link 옵션 사용 시 Data 파일(PGDATA) 구조를 업그레이드 Major버전에 맞춰 변경함으로 디스크 공간 및 소요시간 단축가능(단, 업그레이드 중 오류발생 시 원상복구 불가)
Syntax Example
pg_upgrade Options
- 기본사용법
- 업그레이드 사전점검, Cluster만 체크(-c옵션)
실행결과
- 업그레이드 시 Port 변경하여 수행 (-p, -P옵션)
- 업그레이드 시 Data Directory를 Link로 사용 (-k옵션)
5. initdb
initdb는 PostgreSQL Database Cluster를 생성하는 응용프로그램입니다. initdb 수행 시 Data가 저장될 Directory, 공유 Catalog 테이블 및 postgres Database이 생성됩니다. 또한, Database Cluster의 기본 Locale 및 Character Set Encoding을 초기화하며, 또 다른 새로운 Database의 기본값으로 사용할 template1 Database에 대한 설정을 합니다. initdb 응용프로그램은 PostgreSQL Server 프로세스를 소유한 사용자(postgres)로만 실행이 가능합니다. root로는 실행되지 않습니다.Syntax Example
initdb Options
기본사용법
실행결과
- Locale, Encoding 옵션 지정
6. pg_upgradecluster
pg_upgradecluster는 이전 버전의 PostgreSQL Database Cluster를 새로운 버전으로 업그레이드할 수 있는 응용프로그램입니다. Debian계열(Ubuntu 등)에서 제공되는 방법으로 pg_dumpall, pg_upgrade 보다 쉽게 업그레이드가 가능합니다.pg_upgradecluster 특징
- newdatadir 파라미터로 새로운 버전의 Cluster의 Data Directory를 지정할 수 있습니다. (Default : /var/lib/postgresql/{VERSION}/{CLUSTER_NAME})
- 이전 버전의 Configuration File이 새로운 버전 Cluster에 복사됩니다. 따라서 새로운 버전의 Cluster는 기존에 사용 중이던 Port를 사용하게 되며, 이전 버전의 Cluster는 다른 Port를 사용하도록 구성됩니다.
- 업그레이드 후에는 관리자가 수동으로 이전 버전의 PostgreSQL Cluster를 제거해야 합니다.(pg_dropcluster 이용)
- 별도의 Tablepsace를 사용하고 있는 Database Cluster는 pg_upgradcluster 응용프로그램을 사용할 수 없습니다. pg_dump나 pg_dumpall과 같은 응용프로그램을 통해 업그레이드를 해야 합니다.
Syntax Example
pg_upgardecluster Options
7. pg_dropcluster
pg_dropcluster는 PostgreSQL Cluster의 모든 파일(Data Directory, Log File, Configuration File)을 삭제하는 응용프로그램입니다. Debian계열(Ubuntu 등)에서 제공됩니다.운영 중인 PostgreSQL Server의 Cluster는 삭제되지 않습니다. 이를 무시하고 Cluster를 삭제하고자 할 경우 --stop 옵션을 통해 Cluster가 삭제되기 전에 PostgreSQL Server를 강제 종료할 수 있습니다.
Syntax Example
8. pg_lsclusters
pg_lsclusters는 PostgreSQL의 모든 Cluster 정보를 확인할 수 있는 응용프로그램입니다.Syntax Example
pg_lsclusters Options
9. pg_ctlcluster
pg_ctlcluster는 PostgreSQL 동작(start/stop/restart/reload)를 관리합니다.Syntax Example
pg_ctlcluster Options
함께 보면 좋은 아티클
