이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 토토 베이버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

F.32. pg_upgrade

pg_upgrade(이전에 전화pg_migrator)는 데이터 저장을 허용합니다 안에PostgreSQL데이터 파일이 필요합니다 나중에 마이그레이션PostgreSQL일반적으로 필요한 데이터 덤프/다시로드가없는 주요 버전 주요 버전 업그레이드 (예 : 8.4.7에서 현재 전공까지 출시PostgreSQL. 그렇지 않습니다 사소한 버전 업그레이드에 필요합니다 (예 : 9.0.1에서 9.0.4.

pg_upgrade새로운 기능은 PostgreSQL 메이저에 정기적으로 추가됩니다 출시, 내부 데이터 저장 형식은 거의 변경되지 않습니다.pg_upgrade최선을 다합니다 구식 및 새로운 클러스터는 이진과 호환됩니다 (예 : ~에 의해 다음을 포함하여 호환 컴파일 타임 설정을 확인합니다 32/64 비트 바이너리. 외부 모듈이 중요합니다 또한 이진 호환성이지만를 확인할 수는 없습니다.pg_upgrade.

F.32.1. 지원되는 버전

pg_upgrade는 8.3.x에서 나중에 업그레이드를 지원합니다 현재의 주요 릴리스postgresql10111_10157

F.32.2.pg_upgrade옵션

pg_upgrade다음 명령 줄 인수 :

-B Old_bindir
-old-bindir Oldbindir

이전 클러스터 실행 디렉토리 지정

-B new_bindir
--new-bindir Newbindir

새 클러스터 실행 디렉토리 지정

-c
-체크

클러스터 만 확인하고 데이터를 변경하지 마십시오

-d Old_Datadir
-old-datadir Olddatadir

이전 클러스터 데이터 디렉토리 지정

-d new_datadir
--new-datadir Newdatadir

새 클러스터 데이터 디렉토리 지정

-g
-Debug

디버깅 활성화

-g debug_filename
-Debugfile Debugfilename

파일에 대한 출력 디버깅 활동

-K
-link

새 새로 파일을 복사하는 대신 하드 링크 사용 무리

-l log_filename
-로그 파일 logfilename

파일에 로그 세션 활동

-p Old_portnum
-old-port Portnum

이전 클러스터 포트 번호 지정

-p new_portnum
--- 뉴 포트 Portnum

새 클러스터 포트 번호 지정

-u 사용자 이름
--user 사용자 이름

클러스터 슈퍼 서서

-v
-Versbose

장황한 출력 활성화

-v
-버전

버전 정보 표시, 종료

-?
-h
-help

도움말 표시, 종료

F.32.3. 업그레이드 단계

  1. 선택적으로 이전 클러스터를 이동

    버전 별 설치를 사용하는 경우 디렉토리, 예 :/opt/postgresql/8.4, 당신은 필요하지 않습니다 이전 클러스터를 이동하십시오. 한 번의 클릭 설치 프로그램은 모두 사용합니다 버전 별 설치 디렉토리.

    설치 디렉토리가 아닌 경우 버전 별 (예 :/usr/local/pgsql, 이동해야합니다 현재 PostgreSQL이 디렉토리를 설치하므로 그렇지 않습니다 새로운 것을 방해PostgreSQL설치. 일단 현재의postgresql서버가 종료되었습니다. Postgresql의 이름을 바꾸는 것이 안전합니다. 설치 디렉토리; 이전 디렉토리가라고 가정합니다./usr/local/pgsql, 당신은 할 수 있습니다 하다:

    mv/usr/local/pgsql /usr/local/pgsql.old

    디렉토리의 이름을 바꾸려면

  2. 소스 설치의 경우 새로 구축하십시오 버전

    새 Postgresql 소스를 빌드구성호환되는 플래그 오래된 클러스터.pg_upgrade확인PG_CONTROLDATA모든 설정을 확인하십시오 업그레이드를 시작하기 전에 호환됩니다.

  3. 새 Postgresql Binaries 설치

    새 서버의 바이너리 및 지원 파일을 설치하십시오. 두 클러스터에 동일한 포트 번호를 사용할 수 있습니다. 기존 클러스터와 새로운 클러스터가 동시에 달리기.

    소스 설치의 경우, 새로 설치하려는 경우 사용자 정의 위치의 서버, 사용접두사변수 :

    gmake prefix =/usr/local/pgsql.new install
  4. pg_upgrade를 설치하고 pg_upgrade_support

    installpg_upgradeandpg_upgrade_support새 PostgreSQL 클러스터에서

  5. 새 PostgreSQL 클러스터 초기화

    |initdb. 다시, 호환 사용initdb이전 클러스터와 일치하는 플래그. 많은 미리 빌드 설치 업체 가이 단계를 자동으로 수행합니다. 새 클러스터를 시작할 필요가 없습니다.

  6. 사용자 정의 공유 객체 파일 설치

    사용 된 사용자 정의 공유 객체 파일 (또는 DLL)을 설치합니다 이전 클러스터를 통해 새 클러스터로 (예 :pgcrypto.so, 출신 여부Contrib또는 다른 소스. 스키마 정의를 설치하지 마십시오 (예 :pgcrypto.sql이전 클러스터에서 마이그레이션.

  7. 인증 조정

    pg_upgrade연결됩니다 이전 및 새로운 서버는 여러 번 설정하려면Local유닉스 도메인 소켓 인증IDinpg_hba.conf또는 a 사용~/.pgpass파일 (참조섹션 31.14).

  8. 두 서버 중지

    두 데이터베이스 서버 사용이 중지되었는지 확인하십시오 유닉스, 예 :

    PG_CTL -D /OPT/POSTGRESQL/8.4 정지
    pg_ctl -d /opt/postgresql/9.0 정지

    또는 Windows에서 적절한 서비스 이름을 사용하여 :

    NET STOP PostgreSQL-8.4
    Net Stop Postgresql-9.0

    또는

    NET STOP PGSQL-8.3 (PostgreSQL8.3 이상 다른 서비스 이름을 사용했습니다)
  9. runpg_upgrade

    항상 실행pg_upgrade새 서버의 바이너리, 오래된 사람이 아닙니다.pg_upgrade요구 사항 구형 및 새로운 클러스터 데이터의 사양 및 실행 파일 (bin) 디렉토리. 사용자 및 포트 값을 지정할 수도 있고 복사 대신 데이터를 연결하려고합니다 (the 기본).

    링크 모드를 사용하면 업그레이드가 훨씬 빠릅니다. (파일 복사 없음)이지만 액세스 할 수 없습니다. 이전 클러스터 후 새 클러스터를 시작하면 치받이. 링크 모드는 또한 구식과 새로 필요합니다 클러스터 데이터 디렉토리는 동일한 파일 시스템에 있습니다. 보다pg_upgrade -help전체 옵션 목록.

    Windows 사용자의 경우 로그인해야합니다 관리 계정, 쉘을로 시작합니다.Postgres사용자 및 적절한 설정 길:

    runas /user : postgres "cmd.exe"
    set path =%path%; c : \ program files \ postgresql \ 9.0 \ bin;

    그런 다음 실행pg_upgrade인용 된 디렉토리와 함께, 예 :

    pg_upgrade.exe
            -Old-datadir "c :/program files/postgresql/8.4/data"
            -New-datadir "c :/program files/postgresql/9.0/data"
            --old-bindir "c :/program files/postgresql/8.4/bin"
            --new-bindir "c :/program files/postgresql/9.0/bin"

    일단 시작,pg_upgrade의지 두 클러스터가 호환되는지 확인한 다음 이주. 사용할 수 있습니다pg_upgrade --확인하다이전이더라도 수표 만 수행합니다 서버는 여전히 실행 중입니다.pg_upgrade --확인하다수동 조정을 간략하게 설명합니다 마이그레이션 후에 만들어야합니다.pg_upgrade쓰기 권한이 필요합니다 현재 디렉토리.

    분명히 아무도 클러스터에 액세스하지 않아야합니다 마이그레이션 중. 비 디폴트 포트 사용을 고려하십시오 숫자 (예 : 50432, 오래된 클러스터와 새로운 클러스터가 피할 수 있습니다 업그레이드 중 의도하지 않은 클라이언트 연결.

    데이터베이스를 복원하는 동안 오류가 발생하는 경우 개요,pg_upgrade종료 및 다음에 요약 된대로 이전 클러스터로 되돌려 야합니다단계 14아래. 시도하려면pg_upgrade다시, 이전 클러스터를 수정해야합니다. pg_upgrade 스키마 복원이 성공합니다. 문제가 a Contrib Module, Contrib를 제거해야 할 수도 있습니다 기존 클러스터의 모듈과 새로 설치하십시오. 모듈이 아니라고 가정하면 마이그레이션 후 클러스터 사용자 데이터를 저장하는 데 사용됩니다.

  10. 복원PG_HBA.conf

    수정 된 경우PG_HBA.conf, 원래 설정을 복원하십시오.

  11. 마이그레이션 후 처리

    마이그레이션 후 처리가 필요한 경우 pg_upgrade는 완료되면서 경고를 발행합니다. 그것은 할 것입니다 또한 실행 해야하는 스크립트 파일을 생성합니다. 관리자. 스크립트 파일이 각각에 연결됩니다 마이그레이션 후 처리가 필요한 데이터베이스. 각 스크립트는 다음을 사용하여 실행해야합니다.

    PSQL-username postgres -파일 스크립트.sql postgres

    스크립트를 순서대로 실행할 수 있으며 삭제할 수 있습니다. 그들이 달리면.

    주의

    일반적으로 테이블에 액세스하는 것은 안전하지 않습니다 재 구축 될 때까지 재건 스크립트로 참조됩니다 스크립트가 완성되었습니다. 그렇게 할 수 있습니다 잘못된 결과 또는 성능 저하를 생성합니다. 재건 스크립트에서 참조되지 않은 테이블은 가능합니다 즉시 접근.

  12. 통계

    Optimizer 통계가 전송되지 않기 때문에pg_upgrade, 당신은 될 것입니다 이를 재생하도록 명령을 실행하도록 지시했습니다 마이그레이션이 끝날 때의 정보.

  13. 오래된 클러스터 삭제

    업그레이드에 만족하면 가능합니다 실행하여 이전 클러스터의 데이터 디렉토리를 삭제하십시오 에 언급 된 스크립트pg_upgrade완료. 이전 설치를 삭제할 수도 있습니다 디렉토리 (예 :bin, 공유).

  14. 오래된 클러스터로 되돌아가는

    실행 후pg_upgrade, 오래된 클러스터로 되돌리고 싶다면 여러 가지가 있습니다. 옵션 :

    • 당신이 달렸다면pg_upgradewith-체크, no 이전 클러스터와 귀하에게 수정이 이루어졌습니다 언제든지 재사용 할 수 있습니다.

    • 당신이 실행 한 경우pg_upgradewith-link, 데이터 파일 구식 클러스터와 새 클러스터 사이에서 공유됩니다. 당신이 새 클러스터를 시작한 새 서버가 작성되었습니다 공유 파일에 기존을 사용하는 것은 안전하지 않습니다. 무리.

    • 당신이 실행 한 경우pg_upgrade 없음 -link또는 시작하지 않았습니다 새 서버, 이전 클러스터는 제외하고 수정되지 않았습니다 그게.OLD접미사 추가$ pgdata/global/pg_control그리고 아마도 테이블 스페이스 디렉토리. 이전 클러스터를 재사용하려면 제거.OLD접미사$ pgdata/global/pg_control. 그리고 8.4 이하로 마이그레이션하는 경우 마이그레이션에 의해 생성 된 테이블 스페이스 디렉토리 제거.OLD접미사 테이블 스페이스 디렉토리 이름; 그런 다음 다시 시작할 수 있습니다 오래된 클러스터.

F.32.4. 마이그레이션 제한FromPostgresql 8.3

PostgreSQL 8.3에서 업그레이드에는 추가 제한이 있습니다 이후 PostgreSQL 릴리스에서 업그레이드 할 때 존재하지 않습니다. 을 위한 예를 들어, pg_upgrade는 사용자 열은 다음과 같이 정의됩니다.

  • atsquery데이터 유형

  • 데이터 유형이름첫 번째 열

pg_upgrade가 작동하지 않으면ltreeContrib 모듈이 a 데이터 베이스.

그러한 열을 떨어 뜨려 마이그레이션해야합니다 수동으로.

pg_upgrade는 다음과 같은 경우 테이블 재 구축이 필요합니다.

  • 사용자 열은 데이터 유형입니다TSVECTOR

pg_upgrade는 다시 명령이 필요합니다.

  • 인덱스는 유형 해시 또는 gin입니다.

  • 색인 사용bpchar_pattern_ops

또한 기본 DateTime 스토리지 형식은 정수로 변경되었습니다 후에PostgreSQL8.3. pg_upgrade 구 클러스터와 새로운 클러스터가 일치합니다. 새 클러스터가 있는지 확인하십시오 구성 플래그로 구축-disable-integer-datetimes.

Windows 사용자의 경우 다른 정수로 인해 주목하십시오 1 클릭 설치 프로그램 및 MSI에서 사용하는 DateTimes 설정 설치자, 버전 8.3에서만 업그레이드 할 수 있습니다. 버전 8.4 이상으로 한 번의 클릭 배포 원 클릭 배포. 업그레이드 할 수 없습니다 한 클릭 설치 프로그램에 MSI 설치자.

F.32.5. 노트

pg_upgrade지원하지 않습니다 포함 된 데이터베이스 마이그레이션Reg*OID 참조 시스템 데이터 유형 :Regproc, Regrocedure, Regoper, Regoperator, RegConfigRegDictionary. (Regtype마이그레이션 할 수 있습니다.)

모든 고장, 재건 및 Reindex 사례는보고됩니다.pg_upgrade그들이 당신에게 영향을 미치는 경우 설치; 테이블을 재건하기위한 마이그레이션 후 스크립트 인덱스는 자동으로 생성됩니다.

배포 테스트의 경우 이전의 스키마 전용 사본을 작성하십시오. 클러스터, 더미 데이터를 삽입하고 마이그레이션합니다.

링크 모드를 사용하고 싶고 이전을 원하지 않는다면 새 클러스터가 시작될 때 수정할 클러스터는 기존 클러스터의 사본 및 링크 모드로 마이그레이션하십시오. 에게 오래된 클러스터의 유효한 사본을 만들고 사용rsync오래된 클러스터의 더러운 사본을 작성합니다 서버가 실행되는 동안 기존 서버를 종료하고 달리다rsync다시 사본을 업데이트하려면 일관성을 달성하기 위해 변경 사항이 있습니다.