PostgreSQL 버전 이야기

소프트웨어의 버전 이야기
대부분의 소프트웨어는 숫자나 단어로 된 버전을 붙여 이야기합니다. 이는 그 버전이 언제적 버전이고, 지금도 그 소프트웨어를 만든, 관리하는 쪽에서 그것을 관리하고 있는지가 아주 중요한 부분이기 때문입니다.
PostgreSQL 6.0
이 데이터베이스에 좀 더 관심을 가져본 사람이라면, 왜 PostgreSQL 6.0 버전부터 시작하는지 궁금할 것입니다. 참고로 지금은 PostgreSQL 12 입니다. 6.0 부터 시작하는 이유는 https://dsf.berkeley.edu/oldpost/ 홈페이지를 살펴보면 설명이 됩니다. 언제까지 이 홈페이지를 유지할지는 모르겠지만, PostgreSQL은 이 홈페이지에서 시작합니다.
그 페이지에 보면, postgres-v2, postgres-v3, postgres-v4, postgres95 이렇게 네 버전의 PostgreSQL 전신 버전이 있습니다. (postgres-v1 은 어디있는지 모르겠습니다. - 공식문서를 읽어보면 아마 첫 버전은 비공개였는 듯합니다.)
이렇게 해서, postgres 프로젝트의 정통성을 잇는다는 뜻으로 postgres95 다음 PostgreSQL 6.0 버전이 나오게 됩니다.
PostgreSQL 12 까지
이렇게 6부터 시작해서, 7.1 버전까지는 그냥 시간 순서 대로 단일 마스터 버전에서 쭉 작업 순서에 따라 버전을 매겨 갑니다. 64bit 리눅스를 본격적으로 지원하는 7.2 버전부터 다중 버전 관리 체계로 바뀝니다. (7.1부터 64bit 리눅스에서 쓸 수 있기는 하나, 여러 모로 준비과정이었습니다.)
이렇게 세월은 흘렀는데, 문제가 생깁니다. 워낙 오랫동안 개발 되고 있는 소프트웨어이다보니, 버전 번호를 다 써버렸습니다. 다섯자리 숫자로 처음 한자리가 버전 첫번째 숫자로 9를 다 써버려서, 9.6 상황에서 결국, 9.99 버전 형태로 버전이 계속 바뀌는 꼴이 되어버렸습니다. 그래서, 10버전을 출시하면서 버전 할당 규칙을 바꾸는 대공사를 하게됩니다.
그래서 지금의 여섯자리 숫자 버전체계를 가지게 되었습니다. (show server_version_num)
PostgreSQL 버전과, PG_VERSION 비교
PostgreSQL에서는 초기부터 아주 중요한 OS 환경 변수가 있는데, 자료가 저장되는 공간의 최상위 위치인 $PGDATA 입니다. 이것은 PostgreSQL에서는 데이터 카탈로그 디렉터리, 또는 그냥 피지데이터 디렉터리라고 부릅니다. 모든 버전의 데이터 카탈로그 디렉터리 안에는 정상적인 경우라면, 반드시 PG_VERSION 파일이 있습니다. cat 같은 명령으로 그 파일의 내용을 보면, 그냥 숫자만 보입니다. 예를 들어 PostgreSQL 12.2 버전으로 사용하는 데이터 디렉터리라면, 12가 보입니다. 이 숫자가 PostgreSQL 메이져 버전과 같다고 간주해도 좋습니다. (최근 10년 사이 버전들에 대해서는) 즉, PostgreSQL 버전 가운데 맨 마지막 숫자를 제외한 버전이 같다면 그 데이터 디렉터리를 사용할 수 있음을 의미합니다. (물론 OS, CPU 비트수도 같아야합니다.)
pg_control 버전
PostgreSQL에는 숨어 있는 버전 번호가 또 하나 있는데, pg_controldata 명령으로 살펴 볼 수 있는 pg_control 버전과, 카탈로그 버전입니다. 하나는 PG_VERSION 과 비슷한 숫자로 되어있고, 다른 하나는 날짜로 되어있습니다. 실재로 이 값이 postgres 서버 프로그램과 PGDATA 디렉터리 사이 실행 가능한 조합을 검사하는 값으로 사용됩니다. 또한 이 값 기준으로 pg_upgrade 작업이 진행됩니다.
보너스
준비중 :(