준비
도입배경
PostgreSQL 데이터베이스 서버의 메이져 버전 업그레이드 작업은 전통적으로 pg_dump - pg_restore 명령을 이용해서 데이터베이스 전체를 덤프하고, 그것을 새 버전에서 복원하는 방식으로 진행했습니다.
이 작업은 다른 RDBMS 업그레이드에 비해 꽤나 번거로운 작업이었습니다. 그래서, dump - restore 작업 없이 메이져 버전을 바꿀 방법을 찾던 중, 데이터파일을 직접 변경하는 프로그램을 만들어보자는 취지 아래 이 pg_upgrade 프로그램이 9.0 버전부터 확장 프로그램으로 포함되기 시작했습니다.
pg_upgrade 설치
이 프로그램의 소스 코드는 공식 배포판의 정규 코드들이 있는 src 디렉토리에 있지 않고, 아직까지는 contrib 디렉토리에 포함되어있습니다. (즉, 아직까지는 공식 배포판 안에 포함되기에는 범용적이지 못하거나, 튼튼하지 않다는 이야기입니다.)
PostgreSQL 배포판을 바이너리 설치 파일로 설치를 했다면, 이미 bin 디렉토리 내에 있을 수도 있으며, 없다면, contrib 확장 모듈, 프로그램을 따로 패키징 해서 배포할 수 있으니, 그것을 찾아서 설치하면 됩니다.
소스코드에서 직접 컴파일 해서 사용한다면, contrib 디렉토리 안에 있는 확장 모듈이나, 확장 프로그램 설치와 동일한 벙법으로 설치 하면 됩니다.
$ cd PG_SOURCE/contrib/pg_upgrade
make all && make install
OS 입장에서 준비해야 할 사항
pg_upgrade 프로그램은 기존 자료는 그대로 두고 그것을 바탕으로 새 자료를 만드는 방식으로 진행됩니다. 즉, DB 서버가 운영되고 있는 호스트의 디스크 공간이 현재 사용하고 있는 데이터 클러스터 공간과 함께 새 데이터 클러스터로 쓸 공간이 그만큼 있어야합니다.
또한 PostgreSQL 배포판의 옛 버전과, 새 버전 모두 설치 되어있어야합니다. 만일 OS 표준 패키지로 설치를 했다면, PostgreSQL 버전을 업그레이드하면서, 기존 버전을 덮어 쓰는 경우도 있기 때문에, 반드시 확인을 해야합니다. 여기서는 소스에서 직접 컴파일 해서 사용하는 경우로 글이 작성되기 때문에, 다음과 같이 배포판을 설치했습니다.
/usr/local/pgsql91 (기존 PostgreSQL 설치 디렉토리)
/usr/local/pgsql92 (새 PostgreSQL 설치 디렉토리)
사용법
마무리
Posted by ioseph