PostgreSQL의 신규 기능들을 사용하기 위해서, 혹은 EOL 등의 이유로 PostgreSQL 업그레이드를 고려할 수 있습니다. Major버전 업그레이드의 경우 시스템 테이블과 Data 파일의 내부 아키텍처의 변화에 따라 버전 간의 호환성이 유지되지 않기 때문에
pg_dump, pg_restore, pg_upgrade 명령어 등을 통해 버전 업그레이드를 수행해야 합니다. 업그레이드 작업 이외에도 Configuration 설정과 VACUUM과 같은 부가적인 작업이 필요할 수 있습니다. 이러한 작업은 Minor버전 업그레이드보다 더 많은 작업시간과 서비스 중지 시간이 필요할 수 있습니다.본 문서는 DDL, DML 등의 작업이 없다는 가정하에 동일 서버 대상으로 PostgreSQL 9.6에서 PostgreSQL 12로 Major버전을 업그레이드하는 여러 방법을 설명합니다. 마지막에 설명하는 pg_upgradecluster는 Debian계열(Ubuntu)에서만 사용 가능하며, PostgreSQL의 응용프로그램을 사용하는 업그레이드 방법들은 OS Platform에 상관없이 사용할 수 있습니다. PostgreSQL 12 설치 및 설정→Dump→Restore→Vacuum→업그레이드 확인 순으로 기술됩니다.
📢 응용프로그램에 대한 설명은 [PostgreSQL Setup - Version & Utility]에서 확인.
PostgreSQL 12 설치에 대한 내용은 [PostgreSQL Setup - Installation]에서 확인.
Major Upgrade Test Data
업그레이드 방법을 설명하기에 앞서 업그레이드 대상인 PostgreSQL 9.6에 대한 Configuration File 설정 및 Test Data를 생성합니다. 테스트에 사용되는 업그레이드 대상 서버는
CentOS 7.9에 PostgreSQL 9.6.24 버전입니다.postgresql.conf 설정
pg_hba.conf 설정
Test Data
Database | Table Name | Row Count | Size | Extension |
exemdb_01 | exemtab_01 | 5,000 만건 | 5,901MB(약 6GB) | pg_stat_statements |
exemdb_02 | exemtab_02 | 100 만건 | 125MB | pg_visibility |
Test Data 생성 Script
Database Size
Major Upgrade Using pg_dumpall
pg_dumpall은 PostgreSQL의 전체 Database Cluster에 대한 Backup을 수행하는 응용프로그램입니다. pg_dumpall에는 Role, Tablespace 및 Database 등등 많은 내용이 포함됩니다.
pg_dumpall은 사용자가 pg_dump를 수행하지 않을 뿐이며, 내부적으로 pg_dump 수행됨에 따라서PostgreSQL 전체 Database Cluster의 Backup을 수행하려면 서버에 충분한 디스크 공간이 필요합니다. 업그레이드가 동일한 서버 내에서 수행되는 경우 기존 Database Cluster 사이즈보다 큰 디스크 공간이 있는지 먼저 확인해야 합니다. 새로운 PostgreSQL Database Cluster 전용 공간, Dump File 공간 등이 필요합니다.
1. PostgreSQL 12 설치 및 설정
PostgreSQL 12 설치
📢 PostgreSQL Install 내용은 [PostgreSQL Setup - Installation] 확인.
PostgreSQL 12 - postgresql.conf 설정
Configuration은 버전별로 차이가 있기 때문에 완벽하게 호환되지 않을 수 있으며, PostgreSQL 12 설치 시 postgresql.conf 내용은 기본값으로 설정되어 있기 때문에 PostgreSQL 9.6과 비교하여 PostgreSQL 12에 필요한 postgresql.conf 내용을 변경해야 합니다. 기존에 설치되어 있는 PostgreSQL 9.6과 Port 충돌을 피하기 위해 PostgreSQL 12에서 사용하는 Port도 변경합니다.
2. PostgreSQL 9.6 Cluster Dump
PostgreSQL 12의 pg_dumpall 응용프로그램으로 PostgreSQL 9.6 Cluster Dump를 생성합니다. PostgreSQL 9.6 Cluster의 크기가 큰 경우 pg_dumpall 수행이 오래 걸릴 수 있습니다.
📢 pg_dumpall의 사용법 및 설명서는 [PostgreSQL Setup - Version & Utility] 확인.
실행 결과
pg_dumpall log
3. PostgreSQL 12 Restore
앞에서 생성된 PostgreSQL 9.6 Cluster Dump은 Text Format으로 psql을 통해 PostgreSQL 12에 Restore 합니다.
실행 결과
4. PostgreSQL 12 ANALYZE 실행
모든 데이터베이스 통계가 업데이트되도록 전체 Cluster 단위 ANALYZE를 실행합니다.
실행 결과
5. PostgreSQL 12 Upgrade 확인
PostgreSQL Major Upgrade 확인
실행 결과
exemdb_01 데이터베이스 데이터 확인
실행 결과
exemdb_02 데이터베이스 데이터 확인
실행 결과
Major Upgrade Using pg_dump
이번 단락에서는
pg_dump와 psql 응용프로그램을 통한 PostgreSQL 9.6에서 PostgreSQL 12로 업그레이드에 대한 내용을 기술합니다.pg_dumpall을 통한 업그레이드와 마찬가지로 Database Cluster의 Backup을 수행하려면 서버에 충분한 디스크 공간이 필요합니다. 업그레이드가 동일한 서버 내에서 수행되는 경우 기존 Database Cluster 사이즈보다 큰 디스크 공간이 있는지 먼저 확인해야 합니다. 새로운 PostgreSQL Database Cluster 전용 공간, Dump File 공간 등이 필요합니다.
1. PostgreSQL 12 설치 및 설정
PotgreSQL 12 설치
📢 PostgreSQL Install 내용은 [PostgreSQL Setup - Installation] 확인.
PostgreSQL 12 - postgresql.conf 설정
Configuration은 버전별로 차이가 있기 때문에 완벽하게 호환되지 않을 수 있으며, PostgreSQL 12 설치 시 postgresql.conf 내용은 기본값으로 설정되어 있기 때문에 PostgreSQL 9.6과 비교하여 PostgreSQL 12에 필요한 postgresql.conf 내용을 변경해야 합니다. 기존에 설치되어 있는 PostgreSQL 9.6과 Port 충돌을 피하기 위해 PostgreSQL 12에서 사용하는 Port도 변경합니다.
2. PostgreSQL 9.6 Cluster Global Object Dump & Restore
PostgreSQL 12의 pg_dumpall Utility를 이용하여 PostgreSQL 9.6 Cluster Global Object Dump를 생성합니다. 데이터 Dump가 아닌 Cluster 구조만 Dump 하기 때문에 오래 걸리지 않습니다. 사용자가 추가한 Role과 Tablespace가 없다면, 이번 단계를 수행하지 않아도 됩니다.
실행 결과
3-1. PostgreSQL 9.6 Cluster Dump & Restore
PostgreSQL 12의 pg_dump 응용프로그램으로 PostgreSQL 9.6 Cluster Dump를 생성합니다. pg_dump 특성상 하나의 Database에 대해서만 Dump가 가능하여 Database 개수만큼 pg_dump를 수행해야 합니다.
📢 pg_dump의 사용법 및 설명서는 [PostgreSQL Setup - Version & Utility] 확인.
실행 결과
pg_dump log
앞에서 생성된 PostgreSQL 9.6 Cluster Dump는 Text Format으로 psql을 통해 PostgreSQL 12에 Restore 합니다.
실행 결과
3-2. PostgreSQL 9.6 Cluster Dump & Restore(-F 옵션)
Database의 크기가 클수록 Dump에 많은 시간이 소요됩니다. Dump를 Parallel로 수행하여 소요시간을 단축시킬 수 있습니다. 단, Parallel Dump 수행은 Directory Format(pg_dump -Fd 옵션)에서만 가능하며, pg_restore 응용프로그램을 사용하여 Restore 해야 합니다.
실행 결과
pg_dump -Fd Log
앞에서 생성된 PostgreSQL 9.6 Cluster Dump는 Directory Format으로 pg_restore를 통해 PostgreSQL 12에 Restore 합니다.
📢 pg_restore의 사용법 및 설명서는 [PostgreSQL Setup - Version & Utility] 확인.
실행 결과
4. PostgreSQL 12 ANALYZE 실행
모든 데이터베이스 통계가 업데이트되도록 전체 Cluster 단위 ANALYZE를 실행합니다.
실행 결과
5. PostgreSQL 12 Upgrade 확인
PostgreSQL Major Upgrade 확인
실행 결과
exemdb_01 데이터베이스 데이터 확인
실행 결과
exemdb_02 데이터베이스 데이터 확인
실행 결과
Major Upgrade Using pg_upgrade
이번 단락에서는
pg_upgrade 응용프로그램을 통한 PostgreSQL 9.6에서 PostgreSQL 12로 업그레이드에 대한 내용을 기술합니다.pg_upgrade를 사용하여, Global Object Dump 및 데이터베이스 Dump를 수행하지 않고 업그레이드를 할 수 있습니다. pg_upgrade는 PostgreSQL 9.6 Data Directory에서 PostgreSQL 12 Data Directory로 복사하여 업그레이드를 수행합니다. 사용자가 pg_dump를 수행하지 않을 뿐이며, pg_upgrade 내부적으로 pg_dump와 pg_restore가 수행됩니다. 따라서 데이터베이스 사이즈가 크다면, 오랜 시간이 걸릴 수 있습니다.
pg_dumpall을 통한 업그레이드와 마찬가지로 Database Cluster의 Backup을 수행하려면 서버에 충분한 디스크 공간이 필요합니다. 업그레이드가 동일한 서버 내에서 수행되는 경우 기존 Database Cluster 사이즈보다 큰 디스크 공간이 있는지 먼저 확인해야 합니다. 새로운 PostgreSQL Database Cluster 전용 공간 등이 필요합니다.
1. PostgreSQL 12 설치 및 설정
PostgreSQL 12 설치
📢 PostgreSQL Install 내용은 [PostgreSQL Setup - Installation] 확인.
PostgreSQL 12 - postgresql.conf 설정
Configuration은 버전별로 차이가 있기 때문에 완벽하게 호환되지 않을 수 있으며, PostgreSQL 12 설치 시 postgresql.conf 내용은 기본값으로 설정되어 있기 때문에 PostgreSQL 9.6과 비교하여 PostgreSQL 12에 필요한 postgresql.conf 내용을 변경해야 합니다. 기존에 설치되어 있는 PostgreSQL 9.6과 Port 충돌을 피하기 위해 PostgreSQL 12에서 사용하는 Port도 변경합니다.
2. Cluster Consistency Check
PostgreSQL 9.6 Cluster와 PostgreSQL 12 Cluster 간에 일관성(Consistency) 검사를 수행합니다. pg_upgrade -c 옵션을 사용하며, 일관성 검사를 위해서는 PostgreSQL이 종료되어 있어야 합니다. 일관성 검사 중 오류가 발생하면, 오류에 대한 내용이 리포팅됩니다. 리포팅된 내용을 참고하여 오류를 해결한 후 다시 일관성 검사를 진행합니다.
📢 pg_upgrade의 사용법 및 설명서는 [PostgreSQL Setup - Version & Utility] 확인.
실행 결과
3. Cluster Upgrade
3. Cluster Consistency Check가 통과되면, Cluster Upgrade를 수행합니다. Upgrade를 위해서는 PostgreSQL이 종료되어 있어야 합니다. pg_upgrade는 PostgreSQL 9.6 Data Directory에서 PostgreSQL 12 Data Directory로 복사하여 업그레이드를 수행합니다. 데이터베이스 사이즈가 크다면, 오랜 시간이 걸릴 수 있습니다.실행 결과
4. PostgreSQL 12 기동 및 ANALYZE 실행
모든 데이터베이스 통계가 업데이트되도록 전체 Cluster 단위 ANALYZE를 실행합니다.
실행 결과
5. PostgreSQL 12 Upgrade 확인
PostgreSQL Major Upgrade 확인
실행 결과
exemdb_01 데이터베이스 데이터 확인
실행 결과
exemdb_02 데이터베이스 데이터 확인
실행 결과
Major Upgrade Using pg_upgrade Link Option
이번 단락에서는
pg_upgrade 응용프로그램의 Link 옵션을 통한 PostgreSQL 9.6에서 PostgreSQL 12로 업그레이드에 대한 내용을 기술합니다.앞서 설명한 pg_upgrade를 통한 업그레이드는 데이터베이스 클러스터를 복사하여 업그레이드하는 방식으로 데이터베이스 크기가 클 경우 매우 오랜 시간이 걸릴 수 있습니다. 이러한 이유로 pg_upgrade의 -k 옵션을 이용하여 데이터베이스 클러스터를 복사하지 않고 Hard Link를 이용하여 업그레이드를 할 수 있습니다. Link를 사용하기 때문에, 동일 서버(파일시스템) 내에서만 사용이 가능하며 몇 초안으로 업그레이드를 완료할 수 있습니다.
1. PostgreSQL 12 설치 및 설정
PostgreSQL 12 설치
📢 PostgreSQL Install 내용은 [PostgreSQL Setup - Installation] 확인.
PostgreSQL 12 - postgresql.conf 설정
Configuration은 버전별로 차이가 있기 때문에 완벽하게 호환되지 않을 수 있으며, PostgreSQL 12 설치 시 postgresql.conf 내용은 기본값으로 설정되어 있기 때문에 PostgreSQL 9.6과 비교하여 PostgreSQL 12에 필요한 postgresql.conf 내용을 변경해야 합니다. 기존에 설치되어 있는 PostgreSQL 9.6과 Port 충돌을 피하기 위해 PostgreSQL 12에서 사용하는 Port도 변경합니다.
2. Cluster Consistency Check
PostgreSQL 9.6 Cluster와 PostgreSQL 12 Cluster 간에 일관성(Consistency) 검사를 수행합니다. pg_upgrade -c 옵션을 사용하며, 일관성 검사를 위해서는 PostgreSQL이 종료되어 있어야 합니다. 일관성 검사 중 오류가 발생하면, 오류에 대한 내용이 리포팅됩니다. 리포팅된 내용을 참고하여 오류를 해결한 후 다시 일관성 검사를 진행합니다.
📢 pg_upgrade의 사용법 및 설명서는 [PostgreSQL Setup - Version & Utility] 확인.
실행 결과
3. Cluster Upgrade
3. Cluster Consistency Check가 통과되면, Cluster Upgrade를 수행합니다. Upgrade를 위해서는 PostgreSQL이 종료되어 있어야 합니다. pg_upgrade는 PostgreSQL 9.6 Data Directory에서 PostgreSQL 12 Data Directory로 복사하여 업그레이드를 수행합니다.실행 결과
4. PostgreSQL 12 기동 및 ANALYZE 실행
모든 데이터베이스 통계가 업데이트되도록 전체 Cluster 단위 ANALYZE를 실행합니다.
실행 결과
5. PostgreSQL 12 Upgrade 확인
PostgreSQL Major Upgrade 확인
실행 결과
exemdb_01 데이터베이스 데이터 확인
실행 결과
exemdb_02 데이터베이스 데이터 확인
실행 결과
Major Upgrade Using pg_upgradecluster(Only Debian 계열)
이번 단락에서는
pg_upgradecluster 응용프로그램을 통한 PostgreSQL 9.6에서 PostgreSQL 12로 업그레이드에 대한 내용을 기술합니다.pg_upgradecluster는 기존 PostgreSQL Cluster를 새로운 Major버전으로 업그레이드합니다. Debian계열(Ubuntu 등)에서만 제공되는 방법으로, pg_dumpall, pg_upgrade 보다 쉽게 업그레이드가 가능합니다.
📢 pg_upgradecluster, pg_lsclusters, pg_dropcluster의 사용법 및 설명서는 [PostgreSQL Setup - Version & Utility] 확인.
1. PostgreSQL 12 설치 및 설정
PostgreSQL 12 설치
📢 PostgreSQL Install 내용은 [PostgreSQL Setup - Installation] 확인.
pg_upgradecluster를 사용한 Upgrade는 Cluster가 구성되어 있지 않아도 됩니다. Ubuntu에서는 PostgreSQL 설치 시 Cluster를 자동으로 구성하기 때문에 신규 버전의 Cluster를 삭제합니다.
PostgreSQL Cluster 확인
PostgreSQL 12 Cluster 삭제
2. PostgreSQL Cluster 업그레이드
pg_upgradecluster를 수행하면, Configuration File도 자동으로 업그레이드됩니다.
- pg_hba.conf : PostgreSQL 9.6에서 사용하던 파일 Copy&Paste
- postgresql.conf : PostgreSQL 9.6에서 사용하던 내용을 PostgreSQL 12 버전에 맞게 변경합니다. 업그레이드 시 PostgreSQL 9.6에서 중이던 파라미터는 옮겨지지만, PostgreSQL 12 버전에 추가된 파라미터정보는 포함되어 있지 않습니다. 따라서, PostgreSQL 12에 추가된 파라미터를 사용하기 위해서는 별도의 수정이 필요합니다.
실행 결과
3. PostgreSQL 12 Upgrade 확인
PostgreSQL Major Upgrade 확인
실행 결과
exemdb_01 데이터베이스 데이터 확인
실행 결과
exemdb_02 데이터베이스 데이터 확인
실행 결과
함께 보면 좋은 아티클
