※ 목차 ※
PostgreSQL 버전 정책
1. PostgreSQL 릴리즈 정책
2. PostgreSQL 릴리즈 현황
3. PostgreSQL 버전 표기
PostgreSQL 업그레이드
1. PostgreSQL Minor 업그레이드
2. PostgreSQL Major 업그레이드
PostgreSQL 응용프로그램
1. pg_dump
2. pg_dumpall
3. pg_restore
4. pg_upgrade
5. initdb
6. pg_upgradecluster
7. pg_dropcluster
8. pg_lsclusters
9. pg_ctlcluster
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 릴리즈 현황 (업데이트:2024-05-29) | 목차 |
본 문서를 작성한 일자 기준으로 PostgreSQL 10은 EOL 상태이며, PostgreSQL 11부터는 32Bit를 지원하지 않습니다.
Major Ver | Current Minor Ver | 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 | NO (EOL) | 2018-10-18 | 2023-11-09 | 32Bit 미지원 |
12 | 12.19 | YES | 2019-10-03 | 2024-11-14 | 32Bit 미지원 |
13 | 13.15 | YES | 2020-09-24 | 2025-11-13 | 32Bit 미지원 |
14 | 14.12 | YES | 2021-09-30 | 2026-11-12 | 32Bit 미지원 |
15 | 15.7 | YES | 2022-10-13 | 2027-11-11 | 32Bit 미지원 |
16 | 16.3 | 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버전 간의 호환성을 유지하지 않습니다. 따라서 Major버전 업그레이드는 Database Dump/Restore 또는 pg_upgrade
명령어를 통한 업그레이드를 수행해야 합니다. 이러한 작업은 Minor버전 업그레이드보다 더 많은 서비스 중지 시간이나 작업 시간이 필요할 수 있습니다.
PostgreSQL 응용프로그램
PostgreSQL 설치 시 PostgreSQL Server 이 외에 여러 응용프로그램이 같이 설치됩니다. OS 종류 및 Major 버전에 따라 응용프로그램의 종류가 다릅니다. 아래는 CentOS / PostgreSQL 14에 대한 응용프로그램의 종류입니다.
$ pwd
/usr/pgsql-14/bin
$ ls
clusterdb initdb pg_controldata pg_receivewal pg_test_timing postgres reindexdb
createdb pg_archivecleanup pg_ctl pg_resetwal pg_upgrade postgresql-14-check-db-dir vacuumdb
createuser pg_basebackup pg_dump pg_restore pg_verifybackup postgresql-14-setup
dropdb pg_checksums pg_dumpall pg_rewind pg_waldump postmaster
dropuser pg_config pg_isready pg_test_fsync pgbench psql
PostgreSQL 응용프로그램 설명
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에서 Data 체크섬 활성화, 비활성화 또는 확인 |
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에 의해 생성된 Archive File에서 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에 대한 응용프로그램의 설명 및 사용법을 다룹니다. (pg_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 File | 기본적으로 압축지원 |
Directory | Archive File | 기본적으로 압축지원. Parallel Backup 가능 |
Tar | Archive File | tar 형식으로 Backup 파일 생성 |
📢 스크립트 파일 : SQL 명령이 포함된 일반 텍스트 파일로 사람이 해석, 변경 가능
Archive 파일 : 일종의 바이너리 형태의 파일로 사람이 해석, 변경 불가능
pg_dump 특징
- Role, Tablespace에 대한 Backup 불가능
- 증분 Backup 불가능
- 스크립트 파일은
psql
, Archive File은pg_restore
에 의해 Restore 가능 - Backup 파일에 대한 압축 지원(Custom, Directory Format)
- Parallel Backup 지원(Direcotry Format)
Syntax Example
$ pg_dump --help
pg_dump 응용프로그램은 Database를 Text File(Plain-Text) 또는 기타 다른 Format의 파일로 Dump합니다.
사용법:
pg_dump [OPTION]... [DBNAME]
일반 옵션:
-f, --file=FILENAME 출력 파일이나 디렉토리명
-F, --format=c|d|t|p 출력 파일 형식(custom, directory, tar, plain text(default))
-j, --jobs=NUM Dump 작업 시 병렬처리 개수
-v, --verbose 상세 정보 표시
-V, --version pg_dump 버전 정보
-Z, --compress=0-9 압축 형식에 대한 압축 수준(0~9)
--lock-wait-timeout=TIMEOUT 테이블 Lock에 대한 지정한 대기시간(초) 경과 후 실패
--no-sync 변경 내용이 디스크에 안전하게 기록되기를 기다리지 않음(즉, fsync 작업생략)
-?, --help 도움말
출력 내용을 다루는 옵션:
-a, --data-only Data만 Dump(스키마는 Dump하지 않음)
-b, --blobs Large Object를 포함하여 Dump
-B, --no-blobs Large Object를 제외하고 Dump
-c, --clean 재생성하기 전에 Database Object 삭제(Drop)
-C, --create Database 생성문을 포함하여 Dump
-e, --extension=PATTERN 지정한 Extension만 Dump
-E, --encoding=ENCODING 지정한 인코딩으로 Data Dump
-n, --schema=PATTERN 지정한 스키마만 Dump
-N, --exclude-schema=PATTERN 지정한 스키마만 제외하고 Dump
-O, --no-owner Plain-text 형식에서 Object 소유권 Restore을 건너뜀
-s, --schema-only Schema만 Dump(Data는 Dump하지 않음)
-S, --superuser=NAME Plain-text 형식에서 사용할 superuser 이름
-t, --table=PATTERN 지정한 테이블만 Dump
-T, --exclude-table=PATTERN 지정한 테이블만 제외하고 Dump
-x, --no-privileges 권한은 Dump하지 않음(grant/revoke)
--binary-upgrade 업그레이드 유틸리티 전용
--column-inserts Data를 컬럼명과 함께 Insert문으로 Dump
--disable-dollar-quoting $ 인용을 사용하지 않고, SQL 표준 따옴표("") 사용
--disable-triggers Data만 Restore하는 경우 트리거를 사용하지 않음
--enable-row-security Row 보안 설정(사용자가 접근할 수 있는 콘텐츠만 Dump)
--exclude-table-data=PATTERN 지정된 테이블의 Data는 Dump하지 않음
--extra-float-digits=NUM extra_float_digits 값을 지정한 값으로 변경
--if-exists Object를 삭제(Drop) 할때 IF EXISTS 사용
--include-foreign-data=PATTERN 지정한 패턴과 일치하는 외부 Server의 외부테이블 Data를 포함
--inserts COPY가 아닌 INSERT문으로 Data Dump
--load-via-partition-root root 테이블을 통해 파티션 Load
--no-comments Comment는 Dump하지 않음
--no-publications Publications은 Dump하지 않음
--no-security-labels security label assignments은 Dump하지 않음
--no-subscriptions subscriptions은 Dump하지 않음
--no-synchronized-snapshots 병렬작업 시 synchronized snapshots은 사용하지 않음
--no-tablespaces 테이블스페이스 할당은 Dump하지 않음
--no-toast-compression TOAST 압축을 하지 않고 Dump
--no-unlogged-table-data 기록되지 않은 테이블 Data는 Dump하지 않음
--on-conflict-do-nothing INSERT문에 ON CONFLICT DO NOTHING 추가
--quote-all-identifiers 키워드가 아니어도 모든 식별자를 따옴표로 묶음
--rows-per-insert=NROWS INSERT 당 Row 수(--inserts를 의미)
--section=SECTION 지정된 섹션만 Dump(섹션 : pre-data, data, or post-data)
--serializable-deferrable 자료 정합성을 보장하기 위해 Dump 작업을 직렬화 가능한 트랜잭션으로 처리
--snapshot=SNAPSHOT 지정한 스냅샷을 Dump
--strict-names 테이블 또는 스키마에는 각각 하나 이상의 엔티티와 일치하는 패턴이 포함되어야 함
--use-set-session-authorization 소유권 설정 시 ALTER OWNER 대신 SET SESSION AUTHORIZATION 명령 사용
연결 옵션:
-d, --dbname=DBNAME Dump 할 Database 명
-h, --host=HOSTNAME Database Server host 또는 소켓 디렉토리
-p, --port=PORT Database Server Port 번호
-U, --username=NAME 연결할 Database 사용자
-w, --no-password 암호 입력 프롬프트 표시하지 않음
-W, --password 암호 입력 프롬프트 표시(자동으로처리)
--role=ROLENAME Dump전에 SET ROLE 수행
Database 명이 제공되지 않으면, PGDATABASE 환경 변수 값이 사용됩니다.
Database Backup(-d옵션)
## Database : exem
## Backup File : exem.backup
pg_dump -f exem.backup -d exem
특정 Schema만 Backup(-n옵션)
## Database : postgres
## Schema : exem (only)
## Backup File : schema.backup
pg_dump -f exem.backup -d postgres -n exem
특정 Schema를 제외하고 Backup(-N옵션)
## Database : postgres
## Exclude Schema : exem
## Bacakup File : schema.backup
pg_dump -f schema.backup -d postgres -N exem
특정 Table만 Backup(-t옵션)
## Database : postgres
## Include Schema : exem
## Include Table : tab01
## Backup File : table.backup
pg_dump -f table.backup -d postgres -n exem -t tab01
Custom Format Backup(-Fc옵션)
## Database : exem
## Dump Format : Custom Format
## Backup File : custom.backup
pg_dump -f custom.backup -Fc -d exem
Directory Format, Parallel Backup (-Fd, -j옵션)
## Database : exem
## Parallel Degree : 4
## Dump Format : Directory Format
## Backup Directory Path : /home/postgres/backupdir
pg_dump -f dir.backup -Fd -j 4 -d exem
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 --help
pg_dumpall 프로그램은 PostgreSQL Database Cluster를 SQL 스크립트 파일로 추출하는 프로그램입니다.
사용법:
pg_dumpall [OPTION]...
일반 옵션:
-f, --file=FILENAME 출력 파일명
-v, --verbose 상세 정보 표시
-V, --version pg_dumpall 버전 정보
--lock-wait-timeout=TIMEOUT 테이블 Lock에 대한 지정한 대기시간(초) 경과 후 실패
-?, --help 도움말
출력 내용을 다루는 옵션:
-a, --data-only Data만 Dump(스키마는 Dump하지 않음)
-c, --clean 재생성하기 전에 Database 삭제(Drop)
-E, --encoding=ENCODING 지정한 인코딩으로 Data Dump
-g, --globals-only Global Object만 Dump(Database는 Dump하지 않음)
-O, --no-owner Object 소유권 Restore을 건너뛰기
-r, --roles-only ROLE만 Dump(Database, 테이블스페이스 Dump하지 않음)
-s, --schema-only Schema만 Dump(Data는 Dump하지 않음)
-S, --superuser=NAME Dump에서 사용할 superuser 이름
-t, --tablespaces-only 테이블스페이스만 Dump(Database, ROLE은 Dump하지 않음)
-x, --no-privileges 권한은 Dump하지 않음(grant/revoke)
--binary-upgrade 업그레이드 유틸리티 전용
--column-inserts Data를 컬럼명과 함께 Insert문으로 Dump
--disable-dollar-quoting $ 인용을 사용하지 않고, SQL 표준 따옴표("") 사용
--disable-triggers Data만 Restore하는 동안 트리거를 사용하지 않음
--exclude-database=PATTERN 지정된 Database 제외
--extra-float-digits=NUM extra_float_digits 기본 설정 무시
--if-exists Object를 삭제(Drop) 할때 IF EXISTS 사용
--inserts COPY가 아닌 INSERT문으로 Data Dump
--load-via-partition-root root 테이블을 통해 파티션 Load
--no-comments Comment는 Dump하지 않음
--no-publications Publications은 Dump하지 않음
--no-role-passwords ROLE의 암호는 Dump하지 않음
--no-security-labels security label assignments은 Dump하지 않음
--no-subscriptions subscriptions은 Dump하지 않음
--no-sync 변경 내용이 디스크에 안전하게 기록되기를 기다리지 않음(즉, fsync 작업생략)
--no-tablespaces 테이블스페이스 할당은 Dump하지 않음
--no-toast-compression TOAST 압축을 하지 않고 Dump
--no-unlogged-table-data 기록되지 않은 테이블 Data는 Dump하지 않음
--on-conflict-do-nothing INSERT문에 ON CONFLICT DO NOTHING 추가
--quote-all-identifiers 키워드가 아니어도 모든 식별자를 따옴표로 묶음
--rows-per-insert=NROWS INSERT 당 Row 수(--inserts를 의미)
--use-set-session-authorization 소유권 설정 시 ALTER OWNER 대신 SET SESSION AUTHORIZATION 명령 사용
연결 옵션:
-d, --dbname=CONNSTR Server에 연결하는 데 사용되는 매개변수
-h, --host=HOSTNAME Database Server host(IP) 또는 소켓 디렉토리
-l, --database=DBNAME 연결할 Database 이름
-p, --port=PORT Database Server Port 번호
-U, --username=NAME 연결할 Database 사용자
-w, --no-password 암호 입력 프롬프트 표시하지 않음
-W, --password 암호 입력 프롬프트 표시(자동으로처리)
--role=ROLENAME Dump전에 SET ROLE 수행
-f/--file을 사용하지 않으면, SQL 스크립트가 표준 출력으로 기록됩니다.
Database Cluster Backup
## Backup File : dumpall.sql
pg_dumpall -f dumpall.sql
테이블스페이스만 Backup(-t옵션)
## Backup File : only_tbs.sql
pg_dumpall -f only_tbs.sql -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 --help
pg_restore 프로그램은 pg_dump로 만들어진 Dump File로 PostgreSQL Database에 그 자료를 일괄 입력합니다.
사용법:
pg_restore [OPTION]... [FILE]
일반 옵션:
-d, --dbname=NAME 연결 Database 명
-f, --file=FILENAME 출력 파일명(- for stdout)
-F, --format=c|d|t Backup 파일 형식(지정하지 않으면 자동분석)
-l, --list 아카이브(Dump)의 요약된 TOC 출력
-v, --verbose 상세 정보 표시
-V, --version pg_restore 버전 정보
-?, --help 도움말
Restore 처리를 위한 옵션:
-a, --data-only Data만 Restore(Schema는 Restore하지 않음)
-c, --clean 재생성하기 전에 Database Object 삭제(Drop)
-C, --create Database 생성
-e, --exit-on-error 오류 발생 시 종료(Default : Continue)
-I, --index=NAME 지정한 인덱스 Restore
-j, --jobs=NUM Restore 시 병렬처리 수
-L, --use-list=FILENAME 파일의 목차를 사용하여 순서대로 Restore
-n, --schema=NAME 지정한 Schema의 Object만 Restore
-N, --exclude-schema=NAME 지정한 Schema의 Object을 제외하고 Restore
-O, --no-owner Object 소유권 Restore을 건너뜀
-P, --function=NAME(args) 지정한 Function Restore
-s, --schema-only Schema만 Restore(Data는 Restore하지 않음)
-S, --superuser=NAME trigger 비활성화에 사용할 superuser 이름
-t, --table=NAME 지정한 relation Restore(테이블, 뷰 등)
-T, --trigger=NAME 지정한 trigger Restore
-x, --no-privileges 권한은 Restore하지 않음(grant/revoke)
-1, --single-transaction 단일 트랙잭션으로 Restore
--disable-triggers Data만 Restore하는 동안 트리거를 사용하지 않음
--enable-row-security Row 보안 설정
--if-exists Object를 삭제(Drop) 할때 IF EXISTS 사용
--no-comments Comment는 Restore하지 않음
--no-data-for-failed-tables 생성불가한 테이블의 Data는 Restore하지 않음
--no-publications Publication Restore하지 않음
--no-security-labels security labels Restore하지 않음
--no-subscriptions subscriptions Restore하지 않음
--no-tablespaces tablespace assignments Restore하지 않음
--section=SECTION 지정한 section만 Restore(pre-data, data, or post-data)
--strict-names 테이블 또는 스키마에는 각각 하나 이상의 엔티티와 일치하는 패턴이 포함되어야 함
--use-set-session-authorization 소유권 설정 시 ALTER OWNER 대신 SET SESSION AUTHORIZATION 명령 사용
연결 옵션:
-h, --host=HOSTNAME Database Server host(IP) 또는 소켓 디렉토리
-p, --port=PORT Database Server Port 번호
-U, --username=NAME 연결할 Database 사용자
-w, --no-password 암호 입력 프롬프트 표시하지 않음
-W, --password 암호 입력 프롬프트 표시(자동으로처리)
--role=ROLENAME Restore전에 SET ROLE 수행
-I, -n, -N, -P, -t, -T 및 --section 옵션을 결합하고 여러 번 지정하여 여러 개체를 선택할 수 있습니다.
입력 파일 이름이 제공되지 않으면 표준 입력이 사용됩니다.
특정 Database 존재하지 않는 상태에서 Restore
## Backup방법 : pg_dump -f exem.backup -Fc -d exem
## PostgreSQL 접속 Role : postgres
## Restore 대상 Dump 파일 : exem.backup
## Restore 대상 Database : exem
pg_restore -U postgres -d postgres -C -Fc exem.backup
## Restore Flow
# 1. Superuser인 postgres Role로 postgres Database 접속 (-U, -d 옵션)
# 2. exem Database 생성 (-C 옵션)
# 3. exem Database 접속
# 4. Data Restore (-Fc 옵션)
특정 Database 존재하는 상태에서 Restore
## Backup방법 : pg_dump -f exem.backup -Fc -d exem
## Restore 대상 Database : exem
## Restore 대상 Dump 파일 : exem.backup
pg_restore -d exem -Fc exem.backup
Directory Format, Parallel Restore (-Fd, -j옵션)
## Restore Database : exem
## Restore Degree : 4
## Restore 대상 Dump Directory : /home/postgres/backupdir
pg_restore -f /home/postgres/backupdir -Fd -j 4 -d exem
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 --help
pg_upgrade는 Major 버전이 다른 PostgreSQL Cluster를 업그레이드 합니다.
사용법:
pg_upgrade [OPTION]...
옵션:
-b, --old-bindir=BINDIR 구 버전 Cluster 실행 디렉토리(bin Directory)
-B, --new-bindir=BINDIR 신 버전 Cluster 실행 디렉토리(bin Directory) (기본값: pg_upgrade가 있는 디렉토리)
-c, --check Data 변경은 하지 않고, Cluster만 체크
-d, --old-datadir=DATADIR 구 버전 Cluster Data 디렉토리(data Directory)
-D, --new-datadir=DATADIR 신 버전 Cluster Data 디렉토리(data Directory)
-j, --jobs=NUM 동시 작업할 프로세스 또는 스레드 수
-k, --link 새 Cluster로 복사 대신 하드링크 사용.
-o, --old-options=OPTIONS 구 버전 Cluster에 전달되는 옵션
-O, --new-options=OPTIONS 신 버전 Cluster에 전달되는 옵션
-p, --old-port=PORT 구 버전 Cluster Port 번호(default 50432)
-P, --new-port=PORT 신 버전 Cluster Port 번호(default 50432)
-r, --retain 성공적으로 완료된 후에도 SQL 및 Log 파일 유지
-s, --socketdir=DIR 사용할 소켓 디렉토리(기본값: 현재 디렉토리)
-U, --username=NAME Cluster superuser (default "root")
-v, --verbose 상세 정보 표시
-V, --version pg_upgrade 버전 정보
--clone 새 Cluster 구축을 복사 대신 clone으로 사용
-?, --help 도움말
pg_upgrade를 수행하기 전에 확인:
새 Database Cluster 생성 (신 버전의 initdb 사용)
구 버전 Cluster postmaster 서비스 종료
신 버전 Cluster postmaster 서비스 종료
pg_upgrade를 수행 할때 다음 정보를 제공해야 함:
구 버전 Cluster Data 디렉토리 (-d DATADIR)
신 버전 Cluster Data 디렉토리 (-D DATADIR)
구 버전 Cluster bin 디렉토리 (-b BINDIR)
신 버전 Cluster bin 디렉토리 (-B BINDIR)
사용예시:
pg_upgrade -d oldCluster/data -D newCluster/data -b oldCluster/bin -B newCluster/bin
or
$ export PGDATAOLD=oldCluster/data
$ export PGDATANEW=newCluster/data
$ export PGBINOLD=oldCluster/bin
$ export PGBINNEW=newCluster/bin
$ pg_upgrade
기본 사용법
## Syntax : pg_upgrade -b {oldbindir} -B {newbindir} -d {olddatadir} -D {newdatadir} [options]
pg_upgrade -b /usr/lib/postgresql/9.6/bin/ \
-B /usr/lib/postgresql/13/bin/ \
-d /var/lib/postgresql/9.6/main \
-D /var/lib/postgresql/13/main
업그레이드 사전점검, Cluster만 체크(-c옵션)
pg_upgrade -b /usr/lib/postgresql/9.6/bin/ -B /usr/lib/postgresql/13/bin/ \
-d /var/lib/postgresql/9.6/main -D /var/lib/postgresql/13/main \
-c
[postgres@centos ~]$ /usr/pgsql-12/bin/pg_upgrade -c \
-b /usr/pgsql-9.6/bin \
-B /usr/pgsql-12/bin \
-d /var/lib/pgsql/9.6/data \
-D /var/lib/pgsql/12/data
Performing Consistency Checks
-----------------------------
Checking cluster versions ok
Checking database user is the install user ok
Checking database connection settings ok
Checking for prepared transactions ok
Checking for system-defined composite types in user tables ok
Checking for reg* data types in user tables ok
Checking for contrib/isn with bigint-passing mismatch ok
Checking for tables WITH OIDS ok
Checking for invalid "sql_identifier" user columns ok
Checking for invalid "unknown" user columns ok
Checking for hash indexes ok
Checking for presence of required libraries ok
Checking database user is the install user ok
Checking for prepared transactions ok
Checking for new cluster tablespace directories ok
*Clusters are compatible*
'엑셈 경쟁력 > DB 인사이드' 카테고리의 다른 글
DB 인사이드 | PostgreSQL Setup - Minor Upgrade (0) | 2022.09.28 |
---|---|
DB 인사이드 | PostgreSQL Setup - Installation (0) | 2022.08.25 |
DB 인사이드 | MySQL Architecture - 8. InnoDB : 동작 원리 (3) | 2022.07.27 |
DB 인사이드 | MySQL Architecture - 7. InnoDB : On-Disk Structure (0) | 2022.07.27 |
DB 인사이드 | MySQL Architecture - 6. InnoDB : In-Memory Structure (0) | 2022.07.27 |
댓글