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

pg_upgrade

이름

pg_upgrade- 업그레이드 aPostgreSQL서버 인스턴스

시놉시스

pg_upgrade -B Oldbindir -B Newbindir -d Olddatadir -d Newdatadir[옵션...]

설명

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.

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

옵션

pg_upgrade다음 명령 줄 인수 :

-B Old_bindir
-old-bindir =Old_bindir

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

-B new_bindir
--new-bindir =new_bindir

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

-c
-체크

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

-d Old_datadir
-old-datadir =Old_datadir

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

-d New_datadir
--- 나와 다타 디르 =new_datadir

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

-K
-link

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

-o 옵션
-old-options 옵션

구식으로 직접 전달할 옵션Postgres명령

-o 옵션
--new-options 옵션

새로운 옵션Postgres명령

-p Old_port_number
-old-port =Old_portnum

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

-p new_port_number
--- 뉴 포트 =new_portnum

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

-r
-retain

성공 후에도 SQL 및 로그 파일을 유지합니다 완성

-u user_name
--user =user_name

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

-v
-VERBOSE

장황 내부 로깅 활성화

-v
-버전

버전 정보 표시, 종료

-?
-h
-help

도움말 표시, 종료

usage

이것은 업그레이드를 수행하는 단계입니다.pg_upgrade:

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

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

    설치 디렉토리가 버전 별이 아닌 경우 예 :/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 설치

    새 서버의 바이너리 및 지원 파일을 설치하십시오.

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

    gmake prefix =/usr/local/pgsql.new install
  4. pg_upgrade 및 pg_upgrade_support 설치

    설치pg_upgrade17799_17821pg_upgrade_support새로운 도서관 Postgresql 클러스터.

  5. 새 PostgreSQL 클러스터 초기화

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

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

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

  7. 인증 조정

    pg_upgrade구식 및 새 서버는 여러 번 인증피어inpg_hba.conf또는 a 사용~/.pgpass파일 (참조섹션 31.15).

  8. 두 서버 중지

    두 데이터베이스 서버 모두 ON을 중지했는지 확인하십시오 유닉스, 예 :

    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

    또는

    넷 스톱 pgsql-8.3 (PostgreSQL8.3 및 오래된 서비스 이름을 사용했습니다)
  9. runpg_upgrade

    항상 실행pg_upgrade새 서버의 바이너리, 오래된 사람이 아닙니다.pg_upgrade사양이 필요합니다 기존 및 새로운 클러스터의 데이터 및 실행 가능 (bin) 디렉토리. 당신도 할 수 있습니다 사용자 및 포트 값을 지정하고 데이터를 원하는지 여부 복사 대신 링크 (기본값)

    링크 모드를 사용하면 업그레이드가 훨씬 빠릅니다. (파일 복사 없음)이지만 귀하는 귀하의 이전 클러스터 후 새 클러스터를 시작하면 치받이. 링크 모드는 또한 구식과 새로 필요합니다 클러스터 데이터 디렉토리는 동일한 파일 시스템에 있습니다. 보다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 --확인하다수동 조정을 간략하게 설명합니다 업그레이드 후 만들어야합니다. 당신이 될 것이라면 링크 모드를 사용하면 사용해야합니다.-link옵션-체크링크 모드 별 점검을 활성화합니다.pg_upgrade쓰기가 필요합니다 현재 디렉토리의 허가.

    분명히 아무도 클러스터에 액세스하지 않아야합니다 업그레이드 중.pg_upgrade서버 실행 기본값 의도하지 않은 클라이언트 연결을 피하기 위해 포트 50432에서. 너 수행 할 때 두 클러스터에 동일한 포트 번호를 사용할 수 있습니다. 구식 및 새 클러스터가 동시에 실행. 그러나 오래된 것을 확인할 때 서버를 실행하면 이전 및 새 포트 번호가 다른.

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

  10. 복원pg_hba.conf

    수정 된 경우PG_HBA.conf, 원래 설정을 복원하십시오. 또한 필요할 수도 있습니다 새 클러스터의 다른 구성 파일을 조정하려면 이전 클러스터와 일치하십시오 (예 :postgresql.conf.

  11. 업그레이드 후 처리

    업그레이드 후 처리가 필요한 경우 pg_upgrade 경고가 완료 될 때 경고를 발행합니다. 또한 생성됩니다 관리자가 실행 해야하는 스크립트 파일. 그만큼 스크립트 파일은 필요한 각 데이터베이스에 연결됩니다 업그레이드 후 처리. 각 스크립트를 실행해야합니다 사용 :

    psql-username postgres -file script.sql postgres

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

    주의

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

  12. 통계

    Optimizer 통계가 전송되지 않기 때문에pg_upgrade, 당신은 지시를받습니다 결국 해당 정보를 재생하도록 명령을 실행하려면 업그레이드의.

  13. 오래된 클러스터 삭제

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

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

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

    • 당신이 달렸다면pg_upgradewith-체크, 수정은 없었다 이전 클러스터에 만들어지면 재사용 할 수 있습니다. 언제든지.

    • 당신이 달렸다면pg_upgradewith-link, 데이터 파일은입니다 구 클러스터와 새로운 클러스터 사이에서 공유됩니다. 당신이 시작했다면 새 클러스터, 새로운 서버는 공유 파일과 기존을 사용하는 것은 안전하지 않습니다. 무리.

    • 당신이 운영된다면pg_upgrade 없음 -link또는 새로운 것을 시작하지 않았습니다 서버, 이전 클러스터는 그 점을 제외하고 수정되지 않았습니다. 연결이 시작되면 A.OLD접미사가 추가되었습니다$ pgdata/global/pg_control. 재사용 오래된 클러스터, 아마도를 제거 할 수 있습니다..OLD접미사$ pgdata/global/pg_control; 당신은 할 수 있습니다 이전 클러스터를 다시 시작하십시오.

노트

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

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

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

pre-를 업그레이드하는 경우PostgreSQL9.2 클러스터를 사용하는 클러스터 구성 파일 전용 디렉토리, 실제 데이터를 전달해야합니다 디렉토리 위치pg_upgrade그리고 구성을 전달하십시오 서버의 디렉토리 위치 (예 :-D /Real-Data-directory -o '-d /configuration-directory'.

비 디펜트를 사용하는 이전 서버를 사용하는 경우 Unix-Domain 소켓 디렉토리 또는 기본값과 다른 기본값 새 클러스터의 기본값, setPGHOSTto 이전 서버의 소켓 위치를 가리 킵니다. (이것은 관련이 없습니다 Windows에서.)

로그쉽 대기 서버 (섹션 25.2)는 업그레이드 할 수 없습니다 서버는 쓰기를 허용해야합니다. 가장 간단한 방법은 업그레이드하는 것입니다 기본 및 사용rsync대기. 당신은 실행할 수 있습니다rsync기본은 다운되었거나 기본 백업의 일부로 (섹션 24.3.2) 이전 대기 클러스터를 덮어 쓰는 것은

링크 모드를 사용하고 싶고 이전을 원하지 않는다면 새 클러스터가 시작될 때 수정할 클러스터는 copy of the old cluster and upgrade that in link mode. 만들기 위해 이전 클러스터의 유효한 사본, usersync서버가있는 동안 이전 클러스터의 더러운 사본을 만들려면 실행 한 다음 이전 서버를 종료하고 실행rsync변경 사항이있는 사본을 다시 업데이트하려면 일관성있게 만드십시오. 일부 파일을 제외하고 싶을 수도 있습니다 (예 :postmaster.pid, 문서화 된대로섹션 24.3.3.

PostgreSQL 8.3에서 업그레이드의 제한 사항

업그레이드FromPostgreSQL 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 사용자의 경우 다른 정수로 인해 주목하십시오 그래픽 설치 프로그램 및 MSI에서 사용하는 DateTimes 설정 설치자, 버전 8.3에서만 업그레이드 할 수 있습니다. 버전 8.4 이상에 대한 설치 프로그램 배포 설치자 배포. 업그레이드 할 수 없습니다 새로운 그래픽 설치 프로그램에 MSI 설치 프로그램.