CentOS에 Postgresql 설치 가이드
PostgreSQL은 높은 인지도와 많은 인기를 얻는 오픈소스 RDMBS입니다.
오랜 역사와 많은 레퍼런스를 가지기 때문에 안정성에서도 많은 신뢰를 얻는 소프트웨어입니다.
국내에서는 MySQL을 많이 사용하지만 기업에서 배포하는 방식으로 사용 시 라이선스 문제가 있습니다.
Postgresql의 경우 BSD와 MIT와 비슷한 Liberal Open Source License를 따릅니다.
초기 주요 설정
초기에 설치되어야 하는 모듈과 설정은 다음과 같습니다.
max open files 수 조정
기본 값으로 사용할 경우 운영시 Getting Too many Open files error for Postgres라는 메시지를 볼 수 있습니다.
(사용자가 많을 경우 발생합니다.)
$> vi /etc/security/limits.conf
postgres soft nofile 65535
postgres hard nofile 65535
또는 리눅스 커널에서 다음과 같이 설정할 수 있습니다.
$> vi /etc/sysctl.conf
fs.file-max = 65535
관련 패키지 설치
PostgreSQL 을 설치 하기 위해서는 다음의 패키지가 꼭 필요 하다.
- gcc
- gcc-c++
- make
- autoconf
- readline
- readline-devel
- zlib
- zlib-devel
- openssl
- openssl-devel
- gettext
- gettext-devel
- python
- python-devel
- wget
관련 패키지 설치는 yum을 이용합니다.
$> yum -y install gcc gcc-c++ make autoconf readline readline-devel zlib zlib-devel openssl openssl-devel gettext gettext-devel python python-devel wget
설치 진행
설치 방법은 2가지 방식이 있습니다.
- yum을 이용한 설치
- Source Compile을 이용한 수동 설치
yum을 이용한 설치 방법
- Repostitory RPM을 설치한다.
$> yum install https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-6-x86_64/pgdg-centos95-9.5-2.noarch.rpm
- Client 패키지를 설치한다.
$> yum install postgresql95
- Server 패키지를 설치한다.
$> yum install postgresql95-server
설치 후 데이터 설정과 자동 시작
# 데이터 설정
$> service postgresql-9.5 initdb
# 위의 명령어가 동작하지 않는 다면,
$> /usr/pgsql-9.5/bin/postgresql95-setup initdb
# 서비스 등록
$> chkconfig postgresql-9.5 on
# PosgreSQL 시작
$> service postgresql-9.5 start
Source Compile을 이용한 설치 방법
PostgreSQL Source Download
PostgreSQL FIle Browser에서 원하는 버전을 확인한다.
$> cd /usr/local/src
$> wget https://ftp.postgresql.org/pub/source/v9.5.7/postgresql-9.5.7.tar.gz
$> tar zxvf postgresql-9.5.7.tar.gz
postgres 사용자 생성
$> useradd -d /home/postgres postgres
$> passwd postgres
postgres 계정의 .bash_profile 수정
사용자 환경설정을 진행한다.
$> su - postgres
$> vi .bash_profile
.bash_profile 파일의 하단에 다음 내용을 추가한다.
POSTGRES_HOME=/home/postgres/pgsql
PGLIB=$POSTGRES_HOME/lib
PGDATA=$POSTGRES_HOME/data
MANPATH=$MANPATH:$POSTGRES_HOME/man
PATH=$POSTGRES_HOME/bin:$PATH
export PATH
export POSTGRES_HOME
export PGLIB
export PGDATA
export MANPATH
# I do not know why $PGLIB is not working.
# but once some error(.. cannot open shared object...) occured,
# I have solved this problem with adding below two sentences.
LD_LIBRARY_PATH=/home/postgres/pgsql/lib
export LD_LIBRARY_PATH
PostgreSQL 설치
$> cd /usr/local/src/postgresql-9.5.7
$> ./configure --prefix=/home/postgres/pgsql --enable-depend --enable-nls=utf-8 --with-python
- 설치 디렉터리 : /home/postgres/pgsql
- ./configure : 시스템에 맞추어 소스 트리를 설정(설치를 위한 Makefile 생성), 소스파일에 대한 환경 설정 명령어.
- Configure Opion : http://www.postgresql.org/docs/9.5/static/install-procedure.html
- Error나 Warning이 뜰 경우 “# yum install gcc bison flex”처럼 패키지 설치 후 재실행.
$> make
$> sudo make install
- make : 소스를 컴파일해서 실행 가능한 파일로 생성
- sudo make install : root 권한으로 make에서 만들어진 실행 가능한 파일을 실행하여 실행
데이터 디렉터리 추가 및 권한 부여
$> mkdir -p /home/postgres/pgsql/data
$> chown -R postgres:postgres /home/postgres/pgsql
PostgreSQL 설정 데이터
$> /home/postgres/pgsql/bin/initdb -E utf-8 -D /home/postgres/pgsql/data
- -E : 인코딩 언어 셋
- -D : PostgreSQL 초기 설정 데이터 위치
PostgreSQL 구동 & 종료
PorstgreSQL 구동
$> su - postgres
$> cd /home/postgres/pgsql/bin
$> ./postgres -D /home/postgres/pgsql/data &
# 안될 시,
$> ./pg_ctl -D /home/postgres/pgsql/data -l logfile start
PostgreSQL 종료
$> kill `cat /home/postgres/pgsql/data/postmaster.pid | head -1`
초기 설정
관리자 비밀번호 설정
$> su - postgresql
$> psql -dpostgres
postgres=# \password postgres
Enter new password: [암호 입력]
Enter it again: [암호 재입력]
postgres=# \q
로컬 서버에서 암호를 이용한 접속으로 변경
$> vi pg_hba.conf
# 변경 전
local all all peer
#변경 후
local all all md5
외부 접속 허용
iptables open
$> vi /etc/sysconfig/iptables
# 추가
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT
# iptables 재시작
$> service iptables restart
PostgreSQL 설정 수정
$> vi /home/postgres/pgsql/data/postgresql.conf
# 변경 전
listen_addresses = 'localhost'
# 변경 후
listen_addresses = '*'
# 변경 전
#port = 5432
# 변경 후(주석제거)
port = 5432
$> vi /home/postgres/pgsql/data/pg_hba.conf
# 보통은 특정 대역을 표기 예 : `192.168.0.0/24`
# 추가 - 전체 접근 가능하도록 수정
host all all 0.0.0.0/0 password
- 변경 내역의 반영을 위하여 PostgreSQL 재기동 필요
DB, 사용자 추가 & 설정
Database 생성 & 조회
$> su - postgres
$> /home/postgres/pgsql/bin/createdb [데이터베이스명]
$> /home/postgres/pgsql/bin/psql
# SQL을 이용한 데이터베이스 생성 옵션
CREATE DATABASE name
[ [ WITH ] [ OWNER [=] user_name ]
[ TEMPLATE [=] template ]
[ ENCODING [=] encoding ]
[ LC_COLLATE [=] lc_collate ]
[ LC_CTYPE [=] lc_ctype ]
[ TABLESPACE [=] tablespace_name ]
[ CONNECTION LIMIT [=] connlimit ] ]
# 모든 데이터 베이스 목록 표출
postgres=# \l+
# 데이터 베이스 선택
postgres=# \c [데이터베이스 명]
# 테이블 목록 표출
postgres=# \d
테이블 스페이스 생성
# linux에서 tablespace로 사용할 디렉터리 생성
$> mkdir /home/postgres/tablespace
$> /home/postgres/pgsql/bin/psql
# 여러 테이블 스페이스 추가 가능
postgres=# create tablespace data_tablespace owner sys location '/home/postgres/tablespace';
#테이블 스페이스 생성 확인
postgres=# select * from pg_tablespace;
사용자 추가
# 사용자 추가
$> /home/postgres/pgsql/bin/createuser [아이디]
# 비밀번호 변경
$> /home/postgres/pgsql/bin/psql
postgres=# alter user [아이디] with encrypted password '[비밀번호]';
# 제한된 권한만 부여 가능 예) grant connect, temp on database [데이터베이스 명] to [아이디]
# DB 권한 부여
postgres=# grant all privileges on database [데이터베이스 명] to [아이디];
backup & restore
# 백업
$> /home/postgres/pgsql/bin/pg_dumpall -U postgres -f [백업 파일명]
#복구
$> /home/postgres/pgsql/bin/psql -U postgres -f [백업 파일명]