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

F.36. pg_upgrade

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

Major PostgreSQL은 정기적으로 새로운 기능을 추가합니다 종종 시스템 테이블의 레이아웃을 변경하지만 내부는 데이터 스토리지 형식은 거의 변경되지 않습니다.pg_upgrade이 사실을 사용하여 빠르게 수행하십시오 새로운 시스템 테이블을 만들고 단순히 기존을 재사용하여 업그레이드 사용자 데이터 파일. 미래의 주요 릴리스가 데이터를 변경 한 경우 이전 데이터 형식을 만드는 방식으로 스토리지 형식 읽을 수 없음pg_upgrade그렇지 않습니다 그러한 업그레이드를 위해 사용할 수 있습니다. (커뮤니티는 피하려고 시도 할 것입니다 그러한 상황.)

pg_upgrade최선을 다합니다 구형 및 새로운 클러스터가 이진과 호환되는지 확인하십시오 (예 : ~에 의해 다음을 포함하여 호환 컴파일 타임 설정을 확인합니다 32/64 비트 바이너리. 외부 모듈이 중요합니다 또한 이진 호환성이지만를 확인할 수는 없습니다.pg_upgrade.

F.36.1. 지원되는 버전

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

F.36.2.pg_upgrade옵션

pg_upgrade다음 명령 줄 인수 :

-B Old_bindir
-old-bindir =Old_bindir

이전 클러스터 실행 디렉토리; 환경 변하기 쉬운Oldbindir

-B new_bindir
--new-bindir =new_bindir

새 클러스터 실행 디렉토리; 환경 변하기 쉬운Newbindir

-c
-체크

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

-d Old_datadir
-old-datadir =Old_Datadir

이전 클러스터 데이터 디렉토리; 환경 변수Olddatadir

-D new_datadir
--new-datadir =new_datadir

새 클러스터 데이터 디렉토리; 환경 변수Newdatadir

-g
-Debug

디버깅 활성화

-g debug_filename
-debugfile =debug_filename

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

-K
-link

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

-l log_filename
-로그 파일 =log_filename

파일에 로그 세션 활동

-p Old_port_number
-old-port =Old_portnum

이전 클러스터 포트 번호; 환경 변수pgport

-p new_port_number
--- 뉴 포트 =New_portnum

새 클러스터 포트 번호; 환경 변수pgport

-u user_name
--user =user_name

클러스터의 슈퍼 사용자 이름; 환경 변수PGUSER

-v
-Versbose

장황한 출력 활성화

-v
-버전

버전 정보 표시, 종료

-?
-h
-help

도움말 표시, 종료

F.36.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

    설치pg_upgrade이진 및pg_upgrade_support새로운 PostgreSQL 클러스터.

  5. 새 PostgreSQL 클러스터 초기화

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

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

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

  7. 인증 조정

    pg_upgrade연결됩니다 이전 및 새로운 서버는 여러 번 인증을 설정하려면피어inPG_HBA.conf또는 a 사용~/.pgpass파일 (참조섹션 31.14).

  8. 두 서버 중지

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

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

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

    넷 스톱 PostgreSQL-8.4
    Net Stop Postgresql-9.0

    또는

    넷 스톱 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.36.4. 업그레이드 제한FromPostgresql 8.3

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

  • 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.36.5. 노트

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

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

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

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