CentOS에서 PostgreSQL 컴파일 해서 쓰기

CentOS에서 PostgreSQL 컴파일 필요성

시스템 관리자와 그 시스템 위에서 사용되는 서버 관리자가 분리되어 있는 경우, 대부분의 해당 서버 관리자는 시스템 관리 영역과 서버 관리 영역이 분리되길 원합니다.

또한 시스템 소프트웨어 업그레이드와 관계 없이 서버 업그레이드를 하길 원해서도, 분리되길 원합니다. 

그래서, 이런 서버 프로그램들이 오픈소스라면 대개 그 소스를 구해서 직접 컴파일 해서 씁니다. 

이 글은 CentOS에서 PostgreSQL 소스를 직접 컴파일 해서 설치하고, 데이터베이스 서버를 실행하는 것까지의 이야기를 다룹니다. 


컴파일에 필요한 부가 패키지들

CentOS 5 또는 6 배포판을 minimal 패키지로 설치 했다면, 
컴파일을 위해서 다음 패키지들이 필요합니다. 

  • centos 5.x
uuid 패키지가 기본 배포판에 포함되어 있지 않아서, 
uuid, uuid-devel 패키지를 직접 찾아서 설치해야합니다.
PostgreSQL에서 사용할 수 있는 패키지는 uuid-1.5.1-3.el5 입니다.
# yum install zlib-devel readline-devel tcl-devel perl python-devel \
krb5-devel pam-devel openldap-devel openssl-devel libxml2-devel \
libxslt-devel perl-ExtUtils-Embed 
  • centos 6.x
# yum install zlib-devel readline-devel tcl-devel perl-devel python-devel \
krb5-devel pam-devel openldap-devel openssl-devel libxml2-devel \
libxslt-devel uuid-devel perl-ExtUtils-Embed
  • centos 7.x
# yum install epel-release
# yum install \
gcc readline-devel zlib-devel make gcc-c++ bison flex gettext \
libicu-devel tcl-devel perl perl-ExtUtils-Embed python-devel \
krb5-devel pam-devel openldap-devel openssl-devel selinux-devel \
libselinux-devel systemd-devel vim-enhanced libxml2-devel libxslt-devel \
libuuid-devel clang llvm7.0-devel

Makefile 만들기

# ./configure \
   --prefix=/postgres/9.3 \
   --enable-nls=ko \
   --with-tcl \
   --with-perl \
   --with-python \
   --with-gssapi \
   --with-krb5 \
   --with-pam \
   --with-ldap \
   --with-openssl \
   --with-ossp-uuid \
   --with-libxml \
   --with-libxslt

--with-selinux 옵션은 CentOS 배포판에서 사용하고 있는 selinux 버전과 호환되질 않아서 사용할 수 없었습니다.
--prefix 옵션은 적당한 곳에 설치하면 되지만, PostgreSQL 버전 관리를 위해서, 위와 같은 방식을 사용하던가 ..../pgsql93 이런식으로 이전 버전이나 향후 버전을 고려해서 경로를 지정하는 것이 관리 차원에서 편합니다. 

빌드

# make all && make install
# cd contrib && make all && make install

데이터베이스 클러스터 만들기

# useradd postgres
# su - postgres
$ export PATH=/postgres/9.3/bin:$PATH
$ initdb -D data -E utf8 --no-locale
$ mv data/pg_xlog .
$ ln -s pg_xlog data/
$ vi data/postgresql.conf
postgresql.conf 파일에서 서버를 실행하기 전에 몇가지 수정할 필요가 있습니다. 
listen_addresses = '*'  # 이 서버를 사용할 클라이언트들이 해당 호스트 외부에서 접속 할 때
shared_buffers = 128MB  # 통상 해당 호스트의 물리적 메모리의 1/4 정도를 할당합니다
work_mem = 64MB         # sort, 작업 대상이 되는 테이블의 해당 칼럼 자료량 정도
maintenance_work_mem = 128MB # 통상 vacuum 작업 대상이 되는 테이블 중 무난하게 큰 놈의 크기
checkpoint_segments = 64  # pg_xlog 공간이 넉넉하다면, 넉넉하게 (64 * 2.5 * 16MB 정도 사용됨)
logging_collector = on # pg_log 디렉토리로 서버 로그를 남깁니다
log_line_prefix = '%t %u@%r/%d(%p) ' # 서버 로그의 앞부분 내용
effective_cache_size = 1GB # 통상 호스트의 물리적 메모리 1/2 정도를 지정합니다.
log_directory = '/home/postgres/pg_log' # pg_log 디렉토리도 data 디렉토리 밖으로 뺍니다.
stats_temp_directory = '/dev/shm' # 공유메모리 쪽으로 
#(한 호스트에 하나의 서버만 실행됨을 전제할 때)

DB 서버 실행

$ pg_ctl -D data start

미리 컴파일 된 압축파일들

이렇게 해서 만든 CentOS 5.x, CentOS 6.x 실행파일은 다음 주소에서 다운 받을 수 있습니다.