참고 메뉴얼
- PostgreSQL 공식 문서 : https://www.postgresql.org/docs/
- PostgreSQL 공식 위키 : https://wiki.postgresql.org/wiki/Main_Page
해당 문서는 위 공식 문서와 위키를 참고하여 작성되었습니다.
지원 플랫폼 및 OS
PostgreSQL Build Farm 에서 install 현황이 update 되고 있으니 참고 바랍니다.
패키지
필수 패키지
yum install make gcc gcc-c++ tar zlib zlib-devel readline readline-devel gettext gettext-devel git libxslt libicu
필수 패키지는 아래와 같은 사양을 요구합니다.
- GNU Make 3.80 이상
- 컴파일러 : gcc 권장(C99 호환)
- 압축 패키지 : tar(or
gzip
orbzip2
) - 압축 라이브러리(pg_dump, pg_restore) : zlib
- 명령줄 SQL 인터프리터 : readline
- 영어 이외의 메시지 표시 : gettext
- 확장 모듈 : libxslt, libicu
- git
선택 패키지
yum install perl perl-libs tcl python python-devel python3-libs openssl openssl-devel
선택 패키지는 아래와 같은 사양을 요구합니다.
- libperl 5.8.3 이상
- PL/Tcl : Tcl 8.4 이상
- PL/Python : python 2.7 이상, python 3 지원
- 암호화 클라이언트 연결 : openssl, openssl-devel
- 인증 관련 : Kerberos, OpenLDAP, PAM
최소 설치
최소 설치 사양
- CPU core : 1core
- Memory : 300MB
- Disk 공간 : 750MB
- 컴파일 시 source(350MB)
- PostgreSQL 설치 디렉토리(60MB)
- Database Cluster(40MB)
- regression Test(300MB)
최소 설치 방법 – Linux 소스 설치
공식 홈페이지에서 제공하는 소스파일을 다운 받아 압축해제까지 해줍니다.
아래 설치 과정은 14.2 버전 기준으로 작성되었습니다.
cd postgresql-14.2 ./configure
make 수행전 configure를 수행하여 여러 테스트를 통해 OS 종속변수의 값이나 단점을 감지하고 빌드트리에 여러 파일을 생성하여 발견된 내용을 기록합니다.
make
make install
make 및 make install을 수행 과정에서 컴파일하는데 시간이 많이 소요됩니다. 잠시 커피타임을 가져도 괜찮습니다 🙂
adduser opensql
mkdir /opensql/pg/14/data
chown opensql:tmax -R /opensql
postgresql을 사용할 유저와, 데이터베이스 클러스터 경로를 만드는 과정입니다. opensql 표준 경로로 작성하였습니다.
su – opensql
/usr/local/pgsql/bin/initdb -D /opensql/pg/14/data
/usr/local/pgsql/bin/pg_ctl -D /opensql/pg/14/data -l logfile start
/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test
마지막은 initdb를 수행하고 postgresql을 실행한 후에, test 데이터베이스를 생성하고 접속해보는 것으로 마무리합니다. postgresql의 세계에 오신 여러분을 환영합니다!
Linux 환경에 OpenSQL PostgreSQL 설치
설치 과정은 Centos 7.9버전 기준, postgresql-14.2버전 기준으로 작성되었습니다.
패키지 설치
postgresql 설치에 앞서 필요한 패키지들을 먼저 설치해줍니다.
yum install -y make gcc gcc-c++ tar zlib zlib-devel readline readline-devel gettext gettext-devel git libxslt libicu
yum install -y perl perl-libs tcl python python-devel python3-libs openssl openssl-devel
YUM으로 설치할 경우
- postgresql repository 설정 postgresql 설치 및 업데이트에 필요한 패키지들을 모아놓은 repository 입니다.
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
- postgresql yum 설치
contrib 까지 추가로 설치해줍니다.
yum install -y postgresql14-server postgresql14-contrib
RPM으로 설치할 경우
14.2 버전 외 다른 rpm 파일은 해당 링크 참고 바랍니다.
rpm 설치 시 반드시 아래 순서대로 설치가 되어야합니다.
rpm -ivh https://yum.postgresql.org/14/redhat/rhel-7-x86_64/postgresql14-libs-14.2-1PGDG.rhel7.x86_64.rpm
rpm -ivh https://yum.postgresql.org/14/redhat/rhel-7-x86_64/postgresql14-14.2-1PGDG.rhel7.x86_64.rpm
rpm -ivh https://yum.postgresql.org/14/redhat/rhel-7-x86_64/postgresql14-server-14.2-1PGDG.rhel7.x86_64.rpm
rpm -ivh https://yum.postgresql.org/14/redhat/rhel-7-x86_64/postgresql14-contrib-14.2-1PGDG.rhel7.x86_64.rpm
패키지명 | 설명 |
---|---|
postgresql14-libs-14.2-1PGDG.rhel7.x86_64.rpm | 모든 postgresql 클라이언트에 필요한 공유 라이브러리 |
postgresql14-14.2-1PGDG.rhel7.x86_64.rpm | postgresql 클라이언트 프로그램 및 라이브러리 |
postgresql14-server-14.2-1PGDG.rhel7.x86_64.rpm | postgresql 서버를 만들고 실행하는 데 필요한 프로그램 |
postgresql14-contrib-14.2-1PGDG.rhel7.x86_64.rpm | postgresql과 함께 배포되는 기여 소스 및 바이너리 |
YUM or RPM 설치 후 user 생성 및 Directory 생성
OpenSQL에서 표준으로 설치되는 directory 설명입니다.
경로 | 설명 |
---|---|
/opensql/pg/14/data | PostgreSQL Database Cluster 경로 |
/opensql/pg/14/log/pg_log | PostgreSQL 관련 log 중에 PostgreSQL의 log 경로 |
/opensql/pg/14/pg_wal | PostgreSQL의 wal파일이 저장되는 경로 |
/opensql/pg/14/archive | PostgreSQL의 archive파일이 저장되는 경로 |
/var/run/opensql | PostgreSQL 통신을 위한 socket이 저장되는 경로 |
디렉토리 생성과정을 순서대로 정리했으니 설명과 함께 참고 바랍니다.
su – root
groupadd tmax -g 1008
useradd opensql -u 1008 -g tmax -c ‘OpenSQL Database’ -d /opensql
OS 그룹 & 유저를 생성합니다. uid 및 gid는 1008로 임의로 지정한 것이라서, 환경에 맞게 수정해서 사용하시면 됩니다.
echo “d /run/opensql 0755 opensql tmax -“ > /usr/lib/tmpfiles.d/opensql.conf
/var/run 내 디렉토리가 휘발성으로 삭제되기 때문에 이를 방지하기 위한 명령어 입니다.
/var/run경로는 /run 경로가 소프트링크 되어있습니다.
mkdir -p /opensql/pg/14/data
mkdir -p /opensql/pg/14/log/pg_log
mkdir -p /opensql/pg/14/pg_wal
mkdir -p /opensql/pg/14/archive
mkdir -p /var/run/opensql
chown -R opensql:tmax /opensql
chown -R opensql:tmax /var/run/opensql
위에서 설명한 디렉토리를 만들면서, opensql 권한을 주는 명령어들입니다.
환경 변수 설정
opensql 계정의 profile에 postgresql 환경 변수를 세팅합니다. 상세내용은 주석 참고 바랍니다.
su – opensql
vi ~/.bash_profile
# 이하 .bash_profile에 들어가는 내용
#ref : https://www.postgresql.org/docs/current/libpq-envars.html
#OpenSQL-PostgreSQL ENV
PS1=“[u@h:W]$ “
export PGVERSION=14
if [ -f “/usr/pgsql–$PGVERSION/bin/pg_ctl” ]; then
export PGINST=/usr/pgsql-$PGVERSION #postgresql binary installed path
export MANPATH=/usr/pgsql-$PGVERSION/share/man:$MANPATH #postgresql Man path
export LD_LIBRARY_PATH=/usr/pgsql-$PGVERSION/lib:$LD_LIBRARY_PATH #ld library path #ld library path
export PATH=/usr/pgsql-$PGVERSION/bin:$PATH #postgresql binary path
export PGLIB=/usr/pgsql-$PGVERSION/lib #postgresql libary path
fi
export PGHOME=/opensql/pg #opensql engine directory
export PGDATA=/opensql/pg/$PGVERSION/data #opensql database clsuter directory
export PGHOST=/var/run/opensql #opensql socket directory
export PGUSER=postgres #opensql Basic DB User Name
#OpenSQL-PostgreSQL ALIAS
alias pginst=“cd $PGINST“
alias pglib=“cd $PGLIB“
alias pghome=“cd $PGHOME“
alias pgdata=“cd $PGDATA“
alias pglog=“cd $PGHOME/$PGVERSION/log/pg_log”
alias pgwal=“cd $PGHOME/$PGVERSION/pg_wal”
alias pgconf=“vi $PGDATA/postgresql.conf”
alias pghba=“vi $PGDATA/pg_hba.conf”
# 위 내용 저장 후, 현재 세션에서 프로파일 내용 바로 반영
source ~/.bash_profile
Database Cluster 생성
postgresql의 환경설정파일, 기본 테이블스페이스등이 포함되는 database cluster를 initdb명령어를 통해 생성합니다.
initdb -U postgres -D $PGDATA -X /opensql/pg/$PGVERSION/pg_wal
환경변수에 세팅한 경로를 $PGDATA 및 $PGVERSION을 통해 받아와 바로 initdb를 수행합니다.
postgresql.conf 파라미터 수정
postgresql.conf 파라미터를 수정해 postgresql 시작 준비를 합니다.
cat << EOF >> $PGDATA/postgresql.conf
listen_addresses = ‘*’
port = 5432
unix_socket_directories = ‘/var/run/opensql’
logging_collector = on
log_directory = ‘/opensql/pg/14/log/pg_log’
log_filename = ‘postgresql-%Y-%m-%d-%H%M%S.log’
log_rotation_age = 0
log_rotation_size = 100MB
EOF
archive mode 설정[선택사항]
pg_wal에 쌓이는 wal 파일을 주기적으로 보관하기 위해 archive를 설정할 경우, 디렉토리를 생성 하고 archive_command를 설정합니다.
su – opensql
mkdir /opensql/pg/14/archive
cat << EOF >> $PGDATA/postgresql.conf
archive_mode = on
archive_command = ‘cp “%p” “/opensql/pg/14/archive/%f”‘
EOF
Linux 커널 파라미터 설정
- 커널 파라미터 설정 위치 : /etc/sysctl.conf
- 커널 파라미터는 postgresql.conf 환경설정 파일에서 설정한 파라미터를 바탕으로 설정하는 경우도 있으니, 같이 참고 바랍니다.
- 커널 파라미터 종류
- /etc/systemd/logind.conf 설정
파라미터 | 값 |
---|---|
RemoveIPC | No |
원격 및 로컬 Client 접속 설정
현재 postgresql이 설치된 서버가 아닌 다른 원격 서버에서 postgresql에 접속할 경우 pg_hba.conf 파일에서 허용할 IP 및 METHOD를 정의합니다. Linux, Windows모두 pg_hba.conf에 내용을 추가하면 됩니다.
Linux 기준 pg_hba.conf는 $PGDATA 경로에 있습니다.
vi $PGDATA/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
host 접속할db명 접속할소유자명 접속할 IP주소 접속 방법
vi $PGDATA/pg_hba.conf
TYPE DATABASE USER ADDRESS METHOD
host 접속할db명 접속할소유자명 접속할 IP주소 접속 방법
vi $PGDATA/pg_hba.conf
TYPE DATABASE USER ADDRESS METHOD
host 접속할db명 접속할소유자명 접속할 IP주소 접속 방법
pg_hba.conf에 관련된 내용은 따로 자세히 설명할 예정이니, 아래와 같이 간단하게 입력하겠습니다.
# TYPE DATABASE USER ADDRESS METHOD
host all all 접속할 IP주소 trust
위 구문은 접속할 IP에서 모든 데이터베이스에 모든 소유자로 제약 없이 원격으로 접속하는 것을 허용한다는 의미입니다.
마지막으로 os 방화벽을 설정하는데, 선택사항이니 참고 바랍니다.
Linux에서 postgresql의 기본 포트인 5432를 사용하고 있다는 전제로 작성되었습니다.
Linux에서 postgresql의 기본 포트인 5432를 사용하고 있다는 전제로 작성되었습니다.
su – root
firewall-cmd –permanent –zone=public –add-port=5432/tcp
firewall-cmd –reload
PostgreSQL 실행
postgresql을 실행합니다.
pg_ctl start -D $PGDATA
$PGDATA 데이터 클러스터를 명시하여 시작한다는 의미입니다.
psql 툴을 이용한 DB 접속
psql -U postgres
또는
psql –username=postgres
-U 옵션을 통해 postgres 유저로 기본으로 잡혀있는 postgres 데이터베이스로 접속한다는 의미입니다.

PostgreSQL 종료
pg_ctl stop -D $PGDATA
$PGDATA 데이터베이스 클러스터를 명시하여 postgresql 서버를 종료하겠다는 의미입니다.
PostgreSQL 제거
postgresql을 제거하는 과정입니다. 패키지 삭제 후에도 데이터베이스 클러스터 경로, 바이너리 삭제도 추가로 해야합니다. 삭제는 postgresql 서버 종료 이후 진행합니다.
- 패키지 삭제
- rpm 설치 기준으로, 4가지 rpm을 삭제합니다. 의존성으로 설치했던 libicu, libxslt도 원한다면 삭제해줍니다. 삭제 후에 패키지가 남아있는지 다시한번 확인합니다.
su – root
yum -y remove postgresql14-server postgresql14 postgresql14-libs postgresql14-contrib libicu libxslt
rpm -qa | grep postgresql
- DATA Cluster 삭제
- data 클러스터가 설치되었던 경로의 파일들을 모두 삭제해줍니다.
rm -rf $PGDATA
- 바이너리, 라이브러리등 삭제
- initdb, pg_ctl등의 모듈이 있는 경로 내 파일들을 모두 삭제해줍니다.
rm -rf /usr/pgsql-14
- opensql 계정의 profile 내용 삭제 또는 유저, 그룹 삭제
- 유저의 profile에 적용된 내용을 삭제하거나, 유저와 그룹을 통째로 삭제합니다.
su – opensql
vi ~/.bash_profile
# 이하 내용 모두 삭제
#ref : https://www.postgresql.org/docs/current/libpq-envars.html
#OpenSQL-PostgreSQL ENV
PS1=“[u@h:W]$ “
export PGVERSION=14
if [ -f “/usr/pgsql–$PGVERSION/bin/pg_ctl” ]; then
export PGINST=/usr/pgsql-$PGVERSION #postgresql installed path
export MANPATH=/usr/pgsql-$PGVERSION/share/man:$MANPATH #postgresql Man path
export LD_LIBRARY_PATH=/usr/pgsql-$PGVERSION/lib:$LD_LIBRARY_PATH #ld library path
export PATH=/usr/pgsql-$PGVERSION/bin:$PATH #postgresql binary path
export PGLIB=/usr/pgsql-$PGVERSION/lib #postgresql libary path
fi
export PGHOME=/opensql/pg #opensql engine directory
export PGDATA=/opensql/pg/$PGVERSION/data #opensql database clsuter directory
export PGHOST=/var/run/opensql #opensql socket directory
export PGUSER=postgres #opensql Basic DB User Name
#OpenSQL-PostgreSQL ALIAS
alias pginst=“cd $PGINST“
alias pglib=“cd $PGLIB“
alias pghome=“cd $PGHOME“
alias pgdata=“cd $PGDATA“
alias pglog=“cd $PGHOME/$PGVERSION/log/pg_log”
alias pgwal=“cd $PGHOME/$PGVERSION/pg_wal”
alias pgconf=“vi $PGDATA/postgresql.conf”
alias pghba=“vi $PGDATA/pg_hba.conf”
# 위 내용 삭제 후, 현재 세션에서 프로파일 내용 바로 반영
source ~/.bash_profile
opensql의 profile 내 내용을 삭제합니다.
su – root
groupdel tmax
userdel -e opensql
opensql 그룹을 삭제하고, opensql 계정을 -e 옵션을 통해 흔적도 없이 삭제합니다.
Windows 환경에 OpenSQL PostgreSQL 설치
msys2 설치
PostgreSQL 컴파일을 위하여 msys2를 설치합니다.(설치링크)
msys2 사이트 접속 후 설치 파일 다운로드

실행 후 설치 시작

설치할 폴더 설정

메뉴 바로가기 설정

mysys2 설치 완료

패키지 설치 MinGW-w64(windows GCC 컴파일러, GNU GPL license)
설치 후 MSYS2 실행 체크박스를 체크 하지 않았다면 시작→ MSYS2 MING64를 눌러 실행합니다.
postgresql 컴파일(C,C++)을 위하여 MinGW-w64를 설치해야합니다.(수동 설치 링크)
MSYS2에서 다음 명령어로 설치를 진행합니다.
pacman –needed -S git mingw-w64-x86_64-gcc base-devel

git clone 을 활용해 PostgreSQL 14버전 가져오기
postgresql 소스 설치를 위한 디렉토리를 만든 후에, 공식 홈페이지의 소스코드 페이지에서 postgresql 14.2버전 소스(postgresql-14.2.tar.gz)를 다운 받아 해당 경로에서 압축 해제합니다.

mkdir -p ~/postgres/source
cd ~/postgres/source
경로를 생성하면 실제 윈도우 탐색기의 아래 경로에 디렉토리가 생성됩니다. 다운받은 파일을 이동 후 압축 해제 합니다.

tar -xzvf postgresql-14.2.tar.gz

압축 해제 후 생성된 postgresql-14.2 폴더 내 모든 내용을 /postgres/source 경로로 복사 or 이동합니다.

환경 변수 설정
mingw64의 경로를 path에 세팅합니다.
nano ~/.bash_profile
…
PATH=/mingw64/bin:$PATH
…
추가 후 Ctrl + c → x 입력합니다.

다음 화면에서 y 입력해서 저장합니다.

그 후 엔터를 입력해 다시 터미널로 복귀합니다.


현재 세션에서 프로필 변경사항을 반영합니다.
source ~/.bash_profile
PostgreSQL 설치
PostgreSQL을 make로 설치 진행합니다.
cd ~/postgres
mkdir -p build
build=`pwd`/build
cd ~/postgres/source
./configure –host=x86_64-w64-mingw32 –prefix=$build
make && make install
initdb 실행
cmd 창에서 실행합니다. postgresql 바이너리를 환경변수로 설정하여 실행하거나, msys2에서 컴파일한 경로에서 실행합니다.
initdb.exe –pgdata=C:msys64data –username=postgres –auth=trust -E SQL_ASCII

원격 및 로컬 Client 접속 설정
현재 postgresql이 설치된 서버가 아닌 다른 원격 서버에서 postgresql에 접속할 경우 pg_hba.conf 파일에서 허용할 IP 및 METHOD를 정의합니다. Linux, Windows모두 pg_hba.conf에 내용을 추가하면 됩니다.
Window 기준 pg_hba.conf는 initdb를 수행한 경로(예- pgdata=C:msys64data)에 있습니다.
pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
host 접속할db명 접속할소유자명 접속할 IP주소 접속 방법
pg_hba.conf에 관련된 내용은 따로 자세히 설명할 예정이니, 아래와 같이 간단하게 입력하겠습니다.
# TYPE DATABASE USER ADDRESS METHOD
host all all 접속할 IP주소 trust
위 구문은 접속할 IP에서 모든 데이터베이스에 모든 소유자로 제약 없이 원격으로 접속하는 것을 허용한다는 의미입니다.
마지막으로 os 방화벽을 설정하는데, 선택사항이니 참고 바랍니다.
Windows에서는 제어판 – 윈도우 방화벽 – 고급설정에서 인바운드 규칙에서 포트 추가를 통해 접속 설정이 가능합니다.
윈도우 인바운드 포트 추가 예시

PostgreSQL 실행
postgresql을 실행합니다.
pg_ctl start –pgdata=C:msys64data
pgdata 옵션으로 데이터 클러스터를 명시해서 시작합니다.
psql 툴을 이용한 DB 접속
psql -U postgres
또는
psql –username=postgres
username 옵션을 통해 postgres 유저로 기본으로 잡혀있는 postgres 데이터베이스로 접속한다는 의미입니다.

PostgreSQL 종료
pg_ctl stop –pgdata=C:msys64data
pgdata 옵션으로 데이터베이스 클러스터를 명시해서 종료하겠다는 의미입니다.
PostgreSQL 제거
postgresql을 제거하는 과정입니다. 패키지 삭제 후에도 데이터베이스 클러스터 경로, 바이너리 삭제도 추가로 해야합니다. 삭제는 postgresql 서버 종료 이후 진행합니다.
- MSYS2 제거
- C:msys64 경로에 있는 uninstall.exe 수행합니다. 같이 설치된 PostgreSQL 데이터클러스터 내용 및 엔진들이 같이 삭제 됩니다.


- uninstall 후 잔존 폴더 제거
- 남아있는 디렉토리를 Shift + Delete등을 이용해 완전 삭제합니다.
지금까지 PostgreSQL Install에 관해 알아보았습니다
‘ PostgreSQL Version Upgrade’ 도 바로 이어서 확인해보세요!
https://tmaxtibero.blog/?p=3857&preview=true