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에서 현재까지 업그레이드를 지원합니다. 의 주요 릴리스PostgreSQL, 스냅 샷 및 알파 릴리스 포함.
pg_upgrade다음 명령 줄 인수 :
기존 PostgreSQL 실행 디렉토리; 환경 변수pgbinold
새로운 PostgreSQL 실행 디렉토리; 환경 변수pgbinnew
클러스터 만 확인하고 데이터를 변경하지 마십시오
이전 클러스터 데이터 디렉토리; 환경 변수pgdataold
새 클러스터 데이터 디렉토리; 환경 변수pgdatanew
사용할 동시 프로세스 또는 스레드 수
새 클러스터에 파일을 복사하는 대신 하드 링크 사용
옛날에 직접 전달되는 옵션Postgres명령
옵션을 새로운 사람에게 직접 전달할 옵션Postgres명령
이전 클러스터 포트 번호; 환경 변수pgportold
새 클러스터 포트 번호; 환경 변수pgportnew
성공적인 완료 후에도 SQL 및 로그 파일 유지
클러스터의 슈퍼 사용자 이름; 환경 변수Pguser
장황 내부 로깅 활성화
버전 정보 표시, 종료
도움말 표시, 종료
이것은 업그레이드를 수행하는 단계입니다.pg_upgrade:
선택적으로 이전 클러스터 이동
버전 별 설치 디렉토리를 사용하는 경우 (예 :/opt/postgresql/9.1, 당신은 필요하지 않습니다 이전 클러스터를 이동하십시오. 그래픽 설치 프로그램은 모두 사용합니다 버전 별 설치 디렉토리.
설치 디렉토리가 버전 별이 아닌 경우 (예 :/usr/local/pgsql, 이동해야합니다 현재 PostgreSQL 설치 디렉토리를 방해하지 않도록합니다. 새로PostgreSQL설치. 일단 현재postgresql서버가 종료되어 안전합니다 PostgreSQL 설치 디렉토리의 이름을 바꿉니다. 오래된 것을 가정합니다 디렉토리는/usr/local/pgsql, 당신은 할 수 있습니다 하다:
mv/usr/local/pgsql /usr/local/pgsql.old
디렉토리의 이름을 바꾸려면
소스 설치의 경우 새 버전을 빌드
새 PostgreSQL 소스를 빌드구성옛날과 호환되는 깃발 무리.pg_upgrade확인PG_CONTROLDATA모든 설정을 확인하십시오 업그레이드를 시작하기 전에 호환됩니다.
새 Postgresql Binaries 설치
새 서버의 바이너리 및 지원 파일을 설치하십시오.
소스 설치의 경우 새 서버를 맞춤 위치, 사용prefix변수 :
gmake prefix =/usr/local/pgsql.new install
pg_upgrade 및 pg_upgrade_support 설치
설치pg_upgrade이진 그리고pg_upgrade_support도서관 새로운 PostgreSQL 설치.
새 PostgreSQL 클러스터 초기화
|initdb. 다시, 호환 사용initdb이전 클러스터와 일치하는 플래그. 많은 미리 빌드 설치자는이 단계를 자동으로 수행합니다. 할 필요가 없습니다 새 클러스터를 시작하십시오.
사용자 정의 공유 객체 파일 설치
구식 공유 객체 파일 (또는 DLL)을 설치 새 클러스터로의 클러스터 (예 :pgcrypto.so, 출신 여부Contrib또는 다른 소스. 설치하지 마십시오 스키마 정의, 예 :pgcrypto.sql, 이것들은 이전 클러스터에서 업그레이드되기 때문에.
인증 조정
pg_upgrade구식과 연결됩니다 새 서버가 여러 번, 인증을 설정할 수 있습니다. 에게피어inpg_hba.conf또는 a 사용~/.pgpass파일 (참조섹션 31.15).
두 서버 중지
UNIX에서 두 데이터베이스 서버를 사용하지 않도록하십시오. 예 :
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 이상 다른 서비스 이름을 사용했습니다)
runpg_upgrade
항상 실행pg_upgrade이전 서버가 아닌 새 서버의 이진.pg_upgrade구식 및 새로운 클러스터의 데이터 및 실행 파일 (bin) 디렉토리. 사용자를 지정할 수도 있습니다 포트 값 및 복사 대신 데이터를 연결하는지 여부 (기본값).
링크 모드를 사용하면 업그레이드가 훨씬 빠릅니다 (파일 없음 복사) 및 적은 디스크 공간을 사용하지만 이후 새 클러스터를 시작하면 이전 클러스터에 액세스하십시오. 치받이. 링크 모드는 또한 이전 및 새 클러스터 데이터를 요구합니다. 디렉토리는 동일한 파일 시스템에 있습니다. (테이블 스페이스 및PG_XLOG다른 파일 시스템에있을 수 있습니다.) 참조pg_upgrade -help전체 목록 옵션.
the-Jobs옵션은 여러 CPU를 허용합니다 파일의 복사/링크 및 덤프에 사용되는 코어 데이터베이스 스키마를 동시에 새로 고침; 시작하기에 좋은 곳은 CPU 코어 및 테이블 스페이스 수의 최대 값. 이 옵션은 할 수 있습니다 다중 대사 서버를 업그레이드하는 시간을 크게 줄입니다 멀티 프로세서 기계에서 실행 중.
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 -Check이전 서버가 여전히 실행중인 경우에도 확인합니다.pg_upgrade -Check모든 매뉴얼을 간략하게 설명합니다 업그레이드 후 조정해야합니다. 당신이라면 링크 모드를 사용하려면 사용해야합니다.-link옵션-체크TO 링크 모드 별 검사를 활성화합니다.pg_upgrade현재의 쓰기 권한이 필요합니다 예배 규칙서.
분명히, 아무도 치받이.pg_upgrade기본값으로 의도하지 않은 클라이언트를 피하기 위해 포트 50432에서 서버 실행 사이. 두 클러스터에 동일한 포트 번호를 사용할 수 있습니다. 기존 클러스터와 새 클러스터가 동시에 실행. 그러나 오래된 달리기를 확인할 때 서버, 이전 및 새로운 포트 번호는 달라야합니다.
데이터베이스 스키마를 복원하는 동안 오류가 발생하는 경우pg_upgrade종료하면해야합니다 에 요약 된대로 이전 클러스터로 되돌립니다.14 단계아래. 시도하려면pg_upgrade다시 수정해야합니다 PG_UPGRADE 스키마 복원이 성공하기 위해 이전 클러스터. 만약 문제는 Contrib 모듈이므로 제거해야 할 수도 있습니다. 이전 클러스터에서 모듈을 Contrib하고 새로 설치하십시오. 업그레이드 후 클러스터가 사용되지 않았다고 가정합니다. 사용자 데이터 저장.
복원pg_hba.conf
수정 된 경우PG_HBA.conf, 복원 원래 설정. 다른 것을 조정해야 할 수도 있습니다 이전 클러스터와 일치하는 새 클러스터의 구성 파일 예 :postgresql.conf.
업그레이드 후 처리
업그레이드 후 처리가 필요한 경우 pg_upgrade가됩니다 경고가 완료 될 때 발행. 스크립트 파일도 생성됩니다 관리자가 실행해야합니다. 스크립트 파일이 있습니다 업그레이드 후 처리가 필요한 각 데이터베이스에 연결하십시오. 각 스크립트는 다음을 사용하여 실행해야합니다.
psql-username postgres -파일 스크립트.sql postgres
스크립트는 어떤 순서로든 실행할 수 있으며 일단 삭제할 수 있습니다. 실행되었습니다.
주의 |
일반적으로 재건에 참조 된 테이블에 액세스하는 것은 안전하지 않습니다. 재건 스크립트가 완료 될 때까지 스크립트; 그렇게하고 있습니다 잘못된 결과 또는 성능 저하를 일으킬 수 있습니다. 테이블이 아닙니다 재건 스크립트에서 참조 된 즉시 액세스 할 수 있습니다. |
통계
Optimizer 통계가 전송되지 않기 때문에pg_upgrade, 당신은 명령을 실행하도록 지시 받게됩니다 업그레이드가 끝날 때 해당 정보를 재생합니다. 당신은 할 수 있습니다 새 클러스터와 일치하도록 연결 매개 변수를 설정해야합니다.
오래된 클러스터 삭제
업그레이드에 만족하면 이전을 삭제할 수 있습니다. 에 언급 된 스크립트를 실행하여 클러스터의 데이터 디렉토리pg_upgrade완료. 삭제할 수도 있습니다 이전 설치 디렉토리 (예 :bin, 공유).
오래된 클러스터로 되돌아가는
실행 후pg_upgrade, 당신은 원합니다 이전 클러스터로 되돌리려면 몇 가지 옵션이 있습니다.
당신이 달렸다면pg_upgradewith-체크, 오래된 사람들에게는 수정이 없었습니다 클러스터와 언제든지 재사용 할 수 있습니다.
당신이 달렸다면pg_upgradewith-link, 데이터 파일은 이전과 새로운 클러스터. 새 클러스터를 시작한 경우 새 서버는 공유 파일에 작성되었으며 이전을 사용하는 것은 안전하지 않습니다. 무리.
당신이 달렸다면pg_upgrade 없음 -link또는 새 서버 인 Old를 시작하지 않았습니다 링크가 시작되면 A를 제외하고 클러스터는 수정되지 않았습니다..OLD접미사가 추가되었습니다$ pgdata/global/pg_control. 오래된 것을 재사용합니다 클러스터, 아마도 제거.OLD접미사 에서$ pgdata/global/pg_control; 당신은 할 수 있습니다 그런 다음 이전 클러스터를 다시 시작합니다.
pg_upgrade지원하지 않습니다 포함 된 데이터베이스 업그레이드Reg*OID 참조 시스템 데이터 유형 :Regproc, Regrocedure, Regoper, Regoperator, RegConfig, 그리고Regdictionary. (Regtype업그레이드 할 수 있습니다.)
모든 고장, 재건 및 Reindex 사례는보고됩니다.pg_upgrade그들이 당신에게 영향을 미치는 경우 설치; 업그레이드 후 스크립트는 테이블 및 인덱스를 재구성합니다 자동으로 생성됩니다. 자동화하려는 경우 많은 클러스터를 업그레이드하면 그 클러스터를 찾아야합니다. 동일한 데이터베이스 스키마에는 동일한 업그레이드 단계가 필요합니다 모든 클러스터 업그레이드; 업그레이드 후 단계가 있기 때문입니다 사용자 데이터가 아닌 데이터베이스 스키마를 기반으로합니다.
배포 테스트의 경우 이전의 스키마 전용 사본을 작성하십시오. 클러스터, 더미 데이터를 삽입하고 업그레이드합니다.
pre-를 업그레이드하는 경우PostgreSQL9.2 클러스터를 사용하는 클러스터 구성 파일 전용 디렉토리, 실제 데이터를 전달해야합니다 디렉토리 위치pg_upgrade, 구성 디렉토리 위치를 서버로 전달하십시오 (예 :-d /real-data-directory -o '-d /configuration-directory '.
Default를 사용하는 이전 서버를 사용하는 경우 Unix-Domain 소켓 디렉토리 또는 기본값과 다른 기본값 새 클러스터의 기본값, setpghostto 이전 서버의 소켓 위치를 가리 킵니다. (이것은 관련이 없습니다 Windows.)
로그쉽 대기 서버 (섹션 25.2)는 업그레이드 할 수 없습니다 서버는 쓰기를 허용해야합니다. 가장 간단한 방법은 업그레이드하는 것입니다 기본 및 사용rsync대기. 당신은 실행할 수 있습니다rsync기본은 다운되었거나 기본 백업의 일부로 (섹션 24.3.2) 이전 대기 클러스터를 덮어 쓰는 것.
링크 모드를 사용하고 싶고 이전을 원하지 않는다면 새 클러스터가 시작될 때 수정할 클러스터, 사본을 만드십시오. 이전 클러스터의 링크 모드에서 업그레이드합니다. 유효합니다 이전 클러스터의 사본, 사용rsyncto 서버가 실행되는 동안 이전 클러스터의 더러운 사본을 만듭니다. 그런 다음 이전 서버를 종료하고 실행rsync다시 변경 사항이있는 사본을 업데이트하려면 다시 일관성있게 만드십시오. 일부 파일을 제외하고 싶을 수도 있습니다 (예 :postmaster.pid, 문서화 된대로섹션 24.3.3.
업그레이드FromPostgreSQL 8.3에는 추가 제한이 없습니다 이후 PostgreSQL 릴리스에서 업그레이드. 예를 들어, pg_upgrade 사용자 열이 정의 된 경우 8.3에서 업그레이드를 위해 작동하지 않습니다. 처럼:
aTSQUERY데이터 유형
데이터 유형이름그리고 첫 번째는 아닙니다 열
그러한 열을 떨어 뜨려 수동으로 업그레이드해야합니다.
pg_upgrade가 작동하지 않으면ltreeContrib 모듈이 데이터베이스에 설치되었습니다.
pg_upgrade는 다음과 같은 경우 테이블 재 구축이 필요합니다.
사용자 열은 데이터 유형입니다TSVECTOR
pg_upgrade는 다음과 같은 경우 reindex가 필요합니다.
색인은 유형 해시 또는 gin입니다.
색인 사용bpchar_pattern_ops
또한 기본 DateTime 스토리지 형식은 정수로 변경되었습니다 후에PostgreSQL8.3. pg_upgrade 이전 및 신규가 사용한 DateTime 스토리지 형식이 클러스터 일치. 새 클러스터가 플래그 구성-disable-integer-datetimes.
Windows 사용자의 경우 다른 정수 DateTimes로 인해 그래픽 설치 프로그램과 MSI 설치 프로그램에서 사용하는 설정, IT 설치 프로그램의 버전 8.3에서만 업그레이드 할 수 있습니다. 설치 프로그램 배포판의 8.4 이상 배포. MSI 설치 프로그램에서 새로운 것으로 업그레이드 할 수 없습니다. 그래픽 설치 프로그램.
이전 | 배트맨 토토 : 문서 : 9.3 : 배트맨 토토 9.3.25 문서화 | 다음 |
PG_TEST_TIMING | up | pg_xlogdump |