pg_upgrade — 업그레이드 a포스트그레SQL서버 인스턴스
pg_upgrade -b oldbindir [-B newbindir] -d oldconfigdir -D newconfigdir [옵션...]
pg_upgrade(이전 명칭pg_migrator)은에 저장된 데이터를 허용합니다.포스트그레SQL나중에 업그레이드할 데이터 파일포스트그레SQL주요 버전 업그레이드(예: 12.14에서 13.10으로 또는 14.9에서 15.5로)에 일반적으로 필요한 데이터 덤프/복원이 없는 주 버전입니다. 마이너 버전 업그레이드(예: 12.7에서 12.8로 또는 14.1에서 14.5로)에는 필요하지 않습니다.
주요 PostgreSQL 릴리스에는 시스템 테이블의 레이아웃을 자주 변경하는 새로운 기능이 정기적으로 추가되지만 내부 데이터 저장 형식은 거의 변경되지 않습니다.pg_upgrade이 사실을 사용하여 새 시스템 테이블을 생성하고 이전 사용자 데이터 파일을 재사용함으로써 신속한 업그레이드를 수행합니다. 향후 주요 릴리스에서 이전 데이터 형식을 읽을 수 없게 만드는 방식으로 데이터 저장 형식을 변경하는 경우,pg_upgrade이러한 업그레이드에는 사용할 수 없습니다. (커뮤니티에서는 이러한 상황을 피하기 위해 노력할 것입니다.)
pg_upgrade예를 들어 32/64비트 바이너리를 포함하여 호환 가능한 컴파일 시간 설정을 확인하여 이전 클러스터와 새 클러스터가 바이너리 호환되는지 확인하기 위해 최선을 다합니다. 외부 모듈도 바이너리와 호환되는 것이 중요하지만 이는 확인할 수 없습니다.pg_upgrade.
pg_upgrade9.2.X 이상에서 현재 주요 릴리스로의 업그레이드를 지원합니다.PostgreSQL, 스냅샷 및 베타 릴리스 포함.
토토 핫를 업그레이드하면 대상이 소스 수퍼유저가 선택한 임의의 코드를 실행하게 됩니다. 업그레이드하기 전에 소스 수퍼유저를 신뢰할 수 있는지 확인하세요.
pg_upgrade다음 명령줄 인수를 허용합니다:
-b bindir--old-bindir=bindir이전 PostgreSQL 실행 가능 디렉토리; 환경 변수PGBINOLD
-B bindir--new-bindir=bindir새로운 PostgreSQL 실행 가능 디렉토리; 기본값은pg_upgrade거주; 환경 변수PGBINNEW
-c--확인토토 핫만 확인하고 데이터는 변경하지 마세요.
-d configdir--old-datadir=configdir이전 데이터베이스 클러스터 구성 디렉토리; 환경 변수PGDATAOLD
-D configdir--new-datadir=configdir새 데이터베이스 토토 핫 구성 디렉토리; 환경 변수PGDATANEW
-jnjobs--작업=njobs동시 연결 및 사용할 프로세스/스레드 수
-k--링크새 토토 핫에 파일을 복사하는 대신 하드 링크 사용
-N--동기화 없음기본적으로,pg_upgrade업그레이드된 클러스터의 모든 파일이 디스크에 안전하게 기록될 때까지 기다립니다. 이 옵션으로 인해pg_upgrade기다리지 않고 반환하는 것이 더 빠르지만 후속 운영 체제 충돌로 인해 데이터 디렉토리가 손상될 수 있음을 의미합니다. 일반적으로 이 옵션은 테스트에 유용하지만 프로덕션 설치에는 사용하면 안 됩니다.
-o 옵션--이전 옵션 옵션이전 버전으로 직접 전달되는 옵션포스트그레스명령; 여러 옵션 호출이 추가됩니다.
-O 옵션--새로운 옵션 옵션새 항목에 직접 전달되는 옵션포스트그레스명령; 여러 옵션 호출이 추가됩니다.
-p 포트--old-port=포트이전 클러스터 포트 번호; 환경 변수PGPORTOLD
-P 포트--새 포트=포트새 클러스터 포트 번호; 환경 변수PGPORTNEW
-r--유지성공적인 완료 후에도 SQL 및 로그 파일 유지
-s dir--socketdir=dir업그레이드 중 포스트마스터 소켓에 사용할 디렉토리; 기본값은 현재 작업 디렉터리입니다. 환경 변수PGSOCKETDIR
-유 사용자 이름--사용자 이름=사용자 이름클러스터의 설치 사용자 이름; 환경 변수PGUSER
-v--상세자세한 내부 로깅 활성화
-V--버전버전 정보를 표시한 후 종료
--클론효율적인 파일 복제 사용(또는라고도 함“재링크”일부 시스템에서는) 파일을 새 클러스터에 복사하는 대신. 이로 인해 데이터 파일이 거의 즉시 복사되어 다음과 같은 속도 이점을 얻을 수 있습니다.-k/--링크이전 클러스터는 그대로 유지하면서.
파일 복제는 일부 운영 체제 및 파일 시스템에서만 지원됩니다. 선택되었지만 지원되지 않는 경우,pg_upgrade실행하면 오류가 발생합니다. 현재는 Btrfs 및 XFS(reflink 지원으로 생성된 파일 시스템)가 있는 Linux(커널 4.5 이상)와 APFS가 있는 macOS에서 지원됩니다.
--복사파일을 새 토토 핫에 복사합니다. 이것이 기본값입니다. (또한 참조--링크, --클론, --복사-파일-범위및--스왑.)
--복사-파일-범위다음을 사용하세요copy_file_range효율적인 복사를 위한 시스템 호출입니다. 일부 파일 시스템에서는 다음과 유사한 결과가 나타납니다.--클론, 물리적 디스크 블록을 공유하는 반면 다른 블록에서는 여전히 블록을 복사할 수 있지만 최적화된 경로를 통해 수행합니다. 현재 Linux 및 FreeBSD에서 지원됩니다.
--통계 없음기존 토토 핫의 통계를 새 토토 핫로 복원하지 마십시오.
--set-char-signedness=옵션새 클러스터의 기본 문자 서명을 수동으로 설정합니다. 가능한 값은 다음과 같습니다.서명그리고서명되지 않음.
C 언어에서는 기본 부호 있음문자유형(명시적으로 지정하지 않은 경우)은 플랫폼에 따라 다릅니다. 예를 들어,문자기본값은서명된 문자x86 CPU에서는부호 없는 문자ARM CPU에서.
다음부터 시작PostgreSQL18, 데이터베이스 클러스터는 자체 기본 문자 서명 설정을 유지하며, 이는 다양한 기본 문자 서명을 사용하여 플랫폼 전체에서 일관된 동작을 보장하는 데 사용할 수 있습니다. 기본적으로,pg_upgrade기존 클러스터에서 업그레이드할 때 문자 서명 설정을 유지합니다. 그러나 다음에서 업그레이드하는 경우포스트그레SQL17 이하,pg_upgrade빌드된 플랫폼의 문자 서명을 채택합니다.
이 옵션을 사용하면 상속된 값을 무시하고 새 클러스터에 대한 기본 문자 부호를 명시적으로 설정할 수 있습니다. 이 옵션과 관련된 두 가지 특정 시나리오가 있습니다.
업그레이드 후 다른 플랫폼으로 마이그레이션할 계획이라면 이 옵션을 사용하지 마십시오. 이 경우 기본 동작은 옳습니다. 대신 이 플래그 없이 원래 플랫폼에서 업그레이드를 수행한 다음 나중에 클러스터를 마이그레이션하십시오. 이는 권장되며 가장 안전한 접근 방식입니다.
이미 클러스터를 다른 문자 부호를 가진 플랫폼으로 마이그레이션한 경우(예: x86 기반 시스템에서 ARM 기반 시스템으로), 이 옵션을 사용하여 원래 플랫폼의 기본 문자 부호와 일치하는 부호를 지정해야 합니다. 또한 데이터 파일 마이그레이션과 실행 사이에 데이터 파일을 수정하지 않는 것이 중요합니다.pg_upgrade. pg_upgrade새 플랫폼에서 토토 핫를 시작하는 첫 번째 작업이어야 합니다.
--스왑이전 클러스터의 데이터 디렉토리를 새 클러스터로 이동하십시오. 그런 다음 카탈로그 파일을 새 클러스터에 대해 생성된 파일로 바꿉니다. 이 모드는 더 나은 성능을 발휘할 수 있습니다.--링크, --클론, --복사및--복사-파일-범위, 특히 관계가 많은 토토 핫의 경우.
그러나 이 모드는 이전 클러스터에 많은 가비지 파일을 생성하므로 다음과 같은 경우 파일 동기화 단계가 연장될 수 있습니다.--sync-method=syncfs이 사용됩니다. 따라서 다음을 사용하는 것이 좋습니다.--sync-method=fsync함께--스왑.
또한, 파일 전송 단계가 시작되면 이전 클러스터가 파괴적으로 수정되므로 더 이상 시작하기에 안전하지 않습니다. 보다17단계자세한 내용은.
--동기화 방법=방법다음으로 설정된 경우fsync이 기본값입니다.pg_upgrade은 업그레이드된 토토 핫의 데이터 디렉터리에 있는 모든 파일을 반복적으로 열고 동기화합니다. 파일 검색은 WAL 디렉터리 및 구성된 각 테이블스페이스에 대한 심볼릭 링크를 따릅니다.
리눅스의 경우,syncfs23735_23916recovery_init_sync_method사용 시 주의해야 할 사항에 대한 정보syncfs.
다음 경우에는 이 옵션이 적용되지 않습니다.--동기화 없음사용됩니다.
-?--도움말도움말을 표시한 후 종료
다음은 업그레이드를 수행하는 단계입니다.pg_upgrade:
업그레이드 단계논리적 복제 토토 핫여기에서는 다루지 않습니다. 참조스포츠 토토 베트맨 : 문서 : 18 : 29.13. 치받이자세한 내용은.
선택적으로 이전 클러스터 이동
버전별 설치 디렉토리를 사용하는 경우, 예:/opt/PostgreSQL/18, 이전 클러스터를 이동할 필요가 없습니다. 그래픽 설치 프로그램은 모두 버전별 설치 디렉터리를 사용합니다.
설치 디렉토리가 특정 버전이 아닌 경우, 예:/usr/local/pgsql, 새로운 PostgreSQL 설치 디렉토리를 방해하지 않도록 현재 PostgreSQL 설치 디렉토리를 이동해야 합니다.포스트그레SQL설치. 일단 현재포스트그레SQL서버가 종료되었으므로 PostgreSQL 설치 디렉터리의 이름을 바꾸는 것이 안전합니다. 이전 디렉토리가 다음과 같다고 가정합니다./usr/local/pgsql, 다음을 수행할 수 있습니다.
mv /usr/local/pgsql /usr/local/pgsql.old
디렉토리 이름을 바꾸려면.
소스 설치의 경우 새 버전을 빌드하세요.
다음을 사용하여 새로운 PostgreSQL 소스를 빌드하세요.구성이전 클러스터와 호환되는 플래그.pg_upgrade확인하겠습니다pg_controldata업그레이드를 시작하기 전에 모든 설정이 호환되는지 확인하세요.
새 PostgreSQL 바이너리 설치
새 서버의 바이너리와 지원 파일을 설치하십시오.pg_upgrade기본 설치에 포함되어 있습니다.
소스 설치의 경우, 사용자 정의 위치에 새 서버를 설치하려면 다음을 사용하십시오.접두사변수:
make prefix=/usr/local/pgsql.new install
새 PostgreSQL 클러스터 초기화
다음을 사용하여 새 클러스터를 초기화합니다.initdb. 다시 말하지만, Compatible을 사용하세요.initdb기존 토토 핫와 일치하는 플래그. 많은 사전 구축된 설치 프로그램이 이 단계를 자동으로 수행합니다. 새 토토 핫를 시작할 필요가 없습니다.
확장 공유 개체 파일 설치
많은 확장 및 사용자 정의 모듈, 여부기여또는 다른 소스, 공유 개체 파일(또는 DLL)을 사용합니다. 예:pgcrypto.so. 이전 클러스터에서 이를 사용한 경우 일반적으로 운영 체제 명령을 통해 새 서버 바이너리와 일치하는 공유 개체 파일을 새 클러스터에 설치해야 합니다. 스키마 정의를 로드하지 마십시오(예:확장 프로그램 생성 pgcrypto, 이는 이전 클러스터에서 복제되기 때문입니다. 확장 업데이트를 사용할 수 있는 경우,pg_upgrade이를 보고하고 나중에 업데이트하기 위해 실행할 수 있는 스크립트를 생성할 것입니다.
사용자 정의 전체 텍스트 검색 파일 복사
이전 클러스터에서 새 클러스터로 사용자 정의 전체 텍스트 검색 파일(사전, 동의어, 동의어 사전, 중지 단어)을 복사합니다.
인증 조정
pg_upgrade이전 서버와 새 서버에 여러 번 연결하므로 인증을 다음으로 설정하는 것이 좋습니다.동료에pg_hba.conf또는 다음을 사용하세요~/.pgpass파일(참조메이저 토토 사이트 : 문서 : 18 : 32.16. 암호 파일).
두 서버 모두 중지
Unix에서 두 데이터베이스 서버가 모두 중지되었는지 확인하세요. 예:
pg_ctl -D /opt/PostgreSQL/12 중지 pg_ctl -D /opt/PostgreSQL/18 중지
또는 Windows에서는 적절한 서비스 이름을 사용합니다.
NET STOP postgresql-12 NET STOP postgresql-18
이 종료 중에 스트리밍 복제 및 로그 전달 대기 서버가 실행되어 모든 변경 사항을 수신해야 합니다.
대기 서버 업그레이드 준비
섹션에 설명된 방법을 사용하여 대기 서버를 업그레이드하는 경우11단계, 다음을 실행하여 이전 대기 서버가 따라잡았는지 확인하세요.pg_controldata이전 기본 및 대기 클러스터에 대해. 다음을 확인하세요.“최신 체크포인트 위치”모든 클러스터에서 값이 일치합니다. 또한 다음 사항을 확인하세요.wal_level다음으로 설정되지 않았습니다.최소에서postgresql.conf새 기본 토토 핫에 파일을 추가합니다.
실행pg_upgrade
항상 다음을 실행하세요pg_upgrade이전 서버가 아닌 새 서버의 바이너리.pg_upgrade이전 클러스터와 새 클러스터의 데이터 및 실행 파일 사양이 필요합니다. (빈) 디렉토리. 사용자 및 포트 값을 지정하고 기본 복사 동작 대신 데이터 파일을 연결, 복제 또는 교체할지 여부를 지정할 수도 있습니다.
링크 모드를 사용하면 업그레이드가 훨씬 빨라지고(파일 복사 없음) 디스크 공간을 덜 사용하지만 업그레이드 후 새 클러스터를 시작하면 이전 클러스터에 액세스할 수 없습니다. 또한 링크 모드에서는 이전 클러스터 데이터 디렉터리와 새 클러스터 데이터 디렉터리가 동일한 파일 시스템에 있어야 합니다. (테이블스페이스 및pg_wal다른 파일 시스템에 있을 수 있습니다.) 복제 모드는 동일한 속도와 디스크 공간 이점을 제공하지만 새 클러스터가 시작된 후에 이전 클러스터를 사용할 수 없게 되는 것은 아닙니다. 또한 복제 모드에서는 이전 데이터 디렉터리와 새 데이터 디렉터리가 동일한 파일 시스템에 있어야 합니다. 이 모드는 특정 운영 체제 및 파일 시스템에서만 사용할 수 있습니다. 관계가 많은 경우 스왑 모드가 가장 빠를 수 있지만 파일 전송 단계가 시작되면 이전 클러스터에 액세스할 수 없습니다. 또한 스왑 모드에서는 이전 클러스터 데이터 디렉터리와 새 클러스터 데이터 디렉터리가 동일한 파일 시스템에 있어야 합니다.
설정--작업을 2 이상으로 설정하면 pg_upgrade가 여러 데이터베이스와 테이블스페이스를 병렬로 처리할 수 있습니다. 좋은 출발점은 머신의 CPU 코어 수입니다. 이 옵션은 다중 데이터베이스 및 다중 테이블스페이스 서버의 업그레이드 시간을 크게 줄일 수 있습니다.
Windows 사용자의 경우 관리자 계정으로 로그인한 후 다음을 실행해야 합니다.pg_upgrade인용된 디렉토리 포함, 예:
pg_upgrade.exe
--old-datadir "C:/Program Files/PostgreSQL/12/data"
--new-datadir "C:/Program Files/PostgreSQL/18/data"
--old-bindir "C:/Program Files/PostgreSQL/12/bin"
--new-bindir "C:/Program Files/PostgreSQL/18/bin"
시작하면,pg_upgrade두 클러스터가 호환되는지 확인한 다음 업그레이드를 수행합니다. 당신은 사용할 수 있습니다pg_upgrade --check이전 서버가 아직 실행 중이더라도 검사만 수행합니다.pg_upgrade --check또한 업그레이드 후에 수행해야 할 수동 조정에 대해 설명합니다. 링크, 복제, 파일 범위 복사 또는 스왑 모드를 사용하려는 경우 옵션을 사용해야 합니다.--링크, --클론, --복사-파일-범위또는--스왑함께--확인모드별 검사를 활성화합니다.pg_upgrade현재 디렉토리에 쓰기 권한이 필요합니다.
분명히 업그레이드 중에는 누구도 토토 핫에 액세스해서는 안 됩니다.pg_upgrade의도하지 않은 클라이언트 연결을 방지하기 위해 기본적으로 포트 50432에서 서버를 실행합니다. 이전 클러스터와 새 클러스터가 동시에 실행되지 않으므로 업그레이드를 수행할 때 두 클러스터에 동일한 포트 번호를 사용할 수 있습니다. 단, 기존에 실행중인 서버를 확인할 때에는 기존 포트번호와 신규 포트번호가 달라야 합니다.
데이터베이스 스키마를 복원하는 동안 오류가 발생하는 경우,pg_upgrade종료되며 설명된 대로 이전 클러스터로 되돌려야 합니다.17단계아래. 시도하다pg_upgrade다시 말하지만, pg_upgrade 스키마 복원이 성공하려면 이전 클러스터를 수정해야 합니다. 문제가 다음과 같은 경우:기여모듈을 제거해야 할 수도 있습니다.기여모듈이 사용자 데이터를 저장하는 데 사용되지 않는다고 가정하고 업그레이드 후 새 토토 핫에 모듈을 설치합니다.
스트리밍 복제 및 로그 전달 대기 서버 업그레이드
링크 모드를 사용하고 스트리밍 복제가 있는 경우(참조섹션 26.2.5) 또는 로그 전달(참조PostgreSQL : 문서 : 18 : 26.2. 로그쉽 스포츠 토토 서버) 대기 서버인 경우 다음 단계에 따라 빠르게 업그레이드할 수 있습니다. 당신은 뛰지 않을 것입니다.pg_upgrade대기 서버에 있지만 오히려rsync기본에. 아직 서버를 시작하지 마세요.
만약 그랬다면아님링크 모드 사용, 사용하지 않거나 사용하고 싶지 않음rsync또는 더 쉬운 솔루션을 원하시면 이 섹션의 지침을 건너뛰고 대기 서버를 한 번만 다시 만드십시오.pg_upgrade완료되고 새로운 기본이 실행 중입니다.
대기 서버에 새 PostgreSQL 바이너리 설치
새 바이너리와 지원 파일이 모든 대기 서버에 설치되어 있는지 확인하세요.
새로운 대기 데이터 디렉토리가 작동하는지 확인하세요아님존재
새로운 대기 데이터 디렉토리가 작동하는지 확인하세요아님존재하거나 비어있습니다. 만약에initdb실행되었으므로 대기 서버의 새 데이터 디렉토리를 삭제하십시오.
확장 공유 개체 파일 설치
새 기본 토토 핫에 설치한 새 대기 토토 핫에 동일한 확장 공유 객체 파일을 설치하십시오.
대기 서버 중지
대기 서버가 아직 실행 중이라면 위의 지침을 사용하여 지금 서버를 중지하십시오.
구성 파일 저장
보관해야 하는 이전 대기의 구성 디렉토리에서 구성 파일을 저장하십시오. 예를 들어,postgresql.conf(및 여기에 포함된 모든 파일),postgresql.auto.conf, pg_hba.conf, 다음 단계에서 덮어쓰거나 제거될 것이기 때문입니다.
실행rsync
링크 모드를 사용할 때 다음을 사용하여 대기 서버를 빠르게 업그레이드할 수 있습니다.rsync. 이를 수행하려면 이전 데이터베이스 클러스터 디렉터리와 새 데이터베이스 클러스터 디렉터리 위에 있는 기본 서버의 디렉터리에서 다음을 실행합니다.1차각 대기 서버에 대해:
rsync --archive --delete --hard-links --size-only --no-inc-recursive old_cluster new_cluster 원격_디렉터리
어디에서old_cluster그리고new_cluster기본 디렉토리의 현재 디렉토리에 상대적이며remote_diris위대기의 이전 클러스터 디렉토리와 새 클러스터 디렉토리. 기본 및 대기의 지정된 디렉터리 아래 디렉터리 구조가 일치해야 합니다. 상담하세요rsync원격 디렉토리 지정에 대한 자세한 내용은 매뉴얼 페이지, 예를 들어,
rsync --archive --delete --hard-links --size-only --no-inc-recursive /opt/PostgreSQL/12 \
/opt/PostgreSQL/18 Standby.example.com:/opt/PostgreSQL
다음을 사용하여 명령이 수행할 작업을 확인할 수 있습니다.rsync's--시험 실행옵션. 하는 동안rsync적어도 하나의 대기를 위해 기본에서 실행되어야 하며 실행이 가능합니다.rsync업그레이드된 대기가 시작되지 않은 한, 업그레이드된 대기에서 다른 대기를 업그레이드합니다.
이것은 다음에 의해 생성된 링크를 기록하는 것입니다.pg_upgrade39652_40017rsync임시 및 기록되지 않은 테이블과 관련된 파일은 일반적으로 대기 서버에 존재하지 않기 때문에 불필요하게 복사합니다.
테이블스페이스가 있는 경우 유사한 실행이 필요합니다rsync각 테이블스페이스 디렉토리에 대한 명령, 예:
rsync --archive --delete --hard-links --size-only --no-inc-recursive /vol1/pg_tblsp/PG_12_201909212 \
/vol1/pg_tblsp/PG_18_202307071 Standby.example.com:/vol1/pg_tblsp
이주한 경우pg_wal데이터 디렉토리 외부,rsync해당 디렉토리에서도 실행되어야 합니다.
스트리밍 복제 및 로그 전달 대기 서버 구성
로그 전달을 위한 서버를 구성하십시오. (달릴 필요는 없습니다.)pg_backup_start()그리고pg_backup_stop()또는 대기가 여전히 기본과 동기화되어 있으므로 파일 시스템 백업을 수행하십시오.) 이전 기본이 버전 17.0 이전인 경우 기본의 슬롯이 새 대기로 복사되지 않으므로 이전 대기의 모든 슬롯을 수동으로 다시 생성해야 합니다. 이전 기본이 버전 17.0 이상인 경우 기본의 논리적 슬롯만 새 대기에 복사되지만 이전 대기의 다른 슬롯은 복사되지 않으므로 수동으로 다시 생성해야 합니다.
복원pg_hba.conf
수정한 경우pg_hba.conf, 원래 설정을 복원하세요. 이전 클러스터와 일치하도록 새 클러스터의 다른 구성 파일을 조정해야 할 수도 있습니다. 예:postgresql.conf(및 여기에 포함된 모든 파일),postgresql.auto.conf.
새 서버 시작
이제 새 서버를 안전하게 시작할 수 있습니다. 그다음에는 무엇이든 가능합니다.rsync'대기 서버입니다.
업그레이드 후 처리
업그레이드 후 처리가 필요한 경우 pg_upgrade는 완료 시 경고를 발행합니다. 또한 관리자가 실행해야 하는 스크립트 파일도 생성됩니다. 스크립트 파일은 업그레이드 후 처리가 필요한 각 데이터베이스에 연결됩니다. 각 스크립트는 다음을 사용하여 실행되어야 합니다.
psql --username=postgres --file=script.sql postgres
스크립트는 어떤 순서로든 실행될 수 있으며 실행 후에는 삭제할 수 있습니다.
일반적으로 재구축 스크립트 실행이 완료될 때까지 재구축 스크립트에서 참조된 테이블에 액세스하는 것은 안전하지 않습니다. 그렇게 하면 잘못된 결과가 나오거나 성능이 저하될 수 있습니다. 재구축 스크립트에서 참조되지 않은 테이블은 즉시 액세스할 수 있습니다.
통계
다음이 아닌 이상--통계 없음옵션이 지정되었습니다.pg_upgrade대부분의 최적화 도구 통계를 이전 클러스터에서 새 클러스터로 전송합니다. 그러나 명시적으로 생성된 통계와 같은 일부 통계는 전송되지 않을 수 있습니다.통계 생성또는 확장 프로그램으로 추가된 맞춤 통계입니다.
모든 통계가 전송되지는 않기 때문에pg_upgrade, 업그레이드가 끝나면 해당 정보를 재생성하는 명령을 실행하라는 메시지가 표시됩니다. 새 클러스터와 일치하도록 연결 매개변수를 설정해야 할 수도 있습니다.
먼저, 사용vacuumdb --all --analyze-in-stages --missing-stats-only아무 것도 없이 관계에 대한 최소 최적화 통계를 빠르게 생성합니다. 그런 다음 사용vacuumdb --all --분석 전용모든 관계가 진공 실행 및 분석을 위한 누적 통계를 업데이트했는지 확인합니다. 두 명령 모두에 대해--작업속도를 높일 수 있습니다. 만약에vacuum_cost_delay은 0이 아닌 값으로 설정됩니다. 이는 다음을 사용하여 통계 생성 속도를 높이기 위해 재정의될 수 있습니다.PGOPTIONS예:PGOPTIONS='-c Vacuum_cost_delay=0' 진공 DB ....
이전 클러스터 삭제
업그레이드에 만족하면, 언급된 스크립트를 실행하여 이전 클러스터의 데이터 디렉토리를 삭제할 수 있습니다.pg_upgrade완료되었습니다. (기존 데이터 디렉토리 내부에 사용자 정의 테이블스페이스가 있는 경우 자동 삭제가 불가능합니다.) 또한 기존 설치 디렉토리(예:빈, 공유).
이전 클러스터로 되돌리는 중
만약, 실행 후pg_upgrade, 이전 클러스터로 되돌리려는 경우 몇 가지 옵션이 있습니다.
만약에--확인옵션이 사용되었으며 이전 클러스터는 수정되지 않았습니다. 다시 시작할 수 있습니다.
둘 다 아니라면--링크아니요--스왑사용되었으며 이전 클러스터는 수정되지 않았습니다. 다시 시작할 수 있습니다.
만약에--링크옵션이 사용되었으므로 데이터 파일이 이전 클러스터와 새 클러스터 간에 공유될 수 있습니다.
만약pg_upgrade연결이 시작되기 전에 중단되었으며 이전 클러스터는 수정되지 않았습니다. 다시 시작할 수 있습니다.
만약 그랬다면아님새 클러스터를 시작합니다. 이전 클러스터는 연결이 시작될 때 a.old접미사가 추가됨$PGDATA/글로벌/pg_control. 이전 클러스터를 재사용하려면.old접미사$PGDATA/글로벌/pg_control; 그런 다음 이전 클러스터를 다시 시작할 수 있습니다.
새 클러스터를 시작한 경우 공유 파일에 기록되었으며 이전 클러스터를 사용하는 것은 안전하지 않습니다. 이 경우 이전 클러스터를 백업에서 복원해야 합니다.
만약에--스왑옵션이 사용되었으므로 이전 클러스터가 파괴적으로 수정될 수 있습니다.
만약pg_upgrade이전 클러스터가 더 이상 시작하기에 안전하지 않다고 보고하기 전에 중단되었으며, 이전 클러스터는 수정되지 않았습니다. 다시 시작할 수 있습니다.
만약pg_upgrade기존 클러스터가 더 이상 시작하기에 안전하지 않다고 보고했으며, 기존 클러스터가 파괴적으로 수정되었습니다. 이 경우 이전 클러스터를 백업에서 복원해야 합니다.
일부 환경 변수는 명령줄 옵션에 대한 기본값을 제공하는 데 사용될 수 있습니다:
PGBINOLD이전 PostgreSQL 실행 가능 디렉토리; 옵션-b/--old-bindir.
PGBINNEW새로운 PostgreSQL 실행 가능 디렉토리; 옵션-B/--new-bindir.
PGDATAOLD이전 데이터베이스 클러스터 구성 디렉토리; 옵션-d/--old-datadir.
PGDATANEW새 데이터베이스 클러스터 구성 디렉토리; 옵션-D/--new-datadir.
PGPORTOLD이전 클러스터 포트 번호; 옵션-p/--이전 포트.
PGPORTNEW새 클러스터 포트 번호; 옵션-P/--새-포트.
PGSOCKETDIR업그레이드 중 포스트마스터 소켓에 사용할 디렉토리; 옵션-s/--socketdir.
PGUSER클러스터의 설치 사용자 이름; 옵션-유/--사용자 이름.
pg_upgrade스키마 덤프와 같은 다양한 작업 파일을 생성하여 내부에 저장함pg_upgrade_output.d새 클러스터의 디렉토리에 있습니다. 각 실행은 ISO 8601(%Y%m%dT%H%M%S), 생성된 모든 파일이 저장됩니다.pg_upgrade_output.d다음의 경우 포함된 파일이 자동으로 제거됩니다.pg_upgrade성공적으로 완료되었습니다. 하지만 문제가 발생할 경우 해당 파일이 유용한 디버깅 정보를 제공할 수 있습니다.
pg_upgrade이전 데이터 디렉토리와 새 데이터 디렉토리에서 단기 포스트마스터를 시작합니다. 이러한 포스트마스터와의 통신을 위한 임시 Unix 소켓 파일은 기본적으로 현재 작업 디렉터리에 만들어집니다. 어떤 상황에서는 현재 디렉터리의 경로 이름이 너무 길어서 유효한 소켓 이름이 아닐 수 있습니다. 이 경우 다음을 사용할 수 있습니다.-s소켓 파일을 더 짧은 경로 이름을 가진 일부 디렉토리에 저장하는 옵션. 보안을 위해 해당 디렉토리는 다른 사용자가 읽거나 쓸 수 없도록 해야 합니다. (Windows에서는 지원되지 않습니다.)
모든 실패, 재구축 및 재색인 사례는 다음에 의해 보고됩니다.pg_upgrade설치에 영향을 미치는 경우; 테이블과 인덱스를 재구축하기 위한 업그레이드 후 스크립트가 자동으로 생성됩니다. 많은 토토 핫의 업그레이드를 자동화하려는 경우 데이터베이스 스키마가 동일한 토토 핫에는 모든 토토 핫 업그레이드에 대해 동일한 업그레이드 후 단계가 필요합니다. 이는 업그레이드 후 단계가 사용자 데이터가 아닌 데이터베이스 스키마를 기반으로 하기 때문입니다.
배포 테스트를 위해 이전 클러스터의 스키마 전용 복사본을 생성하고 더미 데이터를 삽입한 후 업그레이드하세요.
pg_upgrade이를 사용하여 테이블 열을 포함하는 데이터베이스의 업그레이드를 지원하지 않습니다reg*OID 참조 시스템 데이터 유형:
regcollation |
regconfig |
regdictionary |
regnamespace |
regoper |
regoperator |
regproc |
regprocedure |
(regclass, regrole및regtype업그레이드할 수 있습니다.)
링크 모드를 사용하고 새 클러스터가 시작될 때 기존 클러스터가 수정되는 것을 원하지 않는 경우 복제 모드 사용을 고려하십시오. 사용할 수 없는 경우 이전 클러스터의 복사본을 만들고 링크 모드에서 업그레이드합니다. 이전 클러스터의 유효한 복사본을 만들려면 다음을 사용하세요.rsync서버가 실행되는 동안 이전 클러스터의 더티 복사본을 생성한 다음 이전 서버를 종료하고 실행합니다.rsync --체크섬다시 복사본을 업데이트하여 일관성을 유지합니다. (--체크섬필요한 이유는rsync파일 수정 시간 단위는 1초뿐입니다.) 일부 파일을 제외할 수 있습니다. 예:postmaster.pid, 설명된 대로섹션 25.3.4. 파일 시스템이 파일 시스템 스냅샷 또는 기록 중 복사 파일 복사본을 지원하는 경우 이를 사용하여 이전 클러스터 및 테이블스페이스의 백업을 만들 수 있습니다. 단, 스냅샷과 복사본은 동시에 생성되거나 데이터베이스 서버가 다운된 동안 생성되어야 합니다.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.