Innovating today, leading tomorrow

OpenSQL_Tutorials
[OpenSQL] PostgreSQL Install

[OpenSQL] PostgreSQL Install

참고 메뉴얼

해당 문서는 위 공식 문서와 위키를 참고하여 작성되었습니다.

지원 플랫폼 및 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 or bzip2)
  • 압축 라이브러리(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.rpmpostgresql 클라이언트 프로그램 및 라이브러리
postgresql14-server-14.2-1PGDG.rhel7.x86_64.rpmpostgresql 서버를 만들고 실행하는 데 필요한 프로그램
postgresql14-contrib-14.2-1PGDG.rhel7.x86_64.rpmpostgresql과 함께 배포되는 기여 소스 및 바이너리

YUM or RPM 설치 후 user 생성 및 Directory 생성

OpenSQL에서 표준으로 설치되는 directory 설명입니다.

경로설명
/opensql/pg/14/dataPostgreSQL Database Cluster 경로
/opensql/pg/14/log/pg_logPostgreSQL 관련 log 중에 PostgreSQL의 log 경로
/opensql/pg/14/pg_walPostgreSQL의 wal파일이 저장되는 경로
/opensql/pg/14/archivePostgreSQL의 archive파일이 저장되는 경로
/var/run/opensqlPostgreSQL 통신을 위한 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 설정
파라미터
RemoveIPCNo

원격 및 로컬 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

광고성 정보 수신

개인정보 수집, 활용 목적 및 기간

(주)티맥스티베로의 개인정보 수집 및 이용 목적은 다음과 같습니다.
내용을 자세히 읽어보신 후 동의 여부를 결정해 주시기 바랍니다.

  • 수집 목적: 티맥스티베로 뉴스레터 발송 및 고객 관리
  • 수집 항목: 성함, 회사명, 회사 이메일, 연락처, 부서명, 직급, 산업, 담당업무, 관계사 여부, 방문 경로
  • 보유 및 이용 기간: 동의 철회 시까지

※ 위 개인정보 수집 및 이용에 대한 동의를 거부할 권리가 있습니다.
※ 필수 수집 항목에 대한 동의를 거부하는 경우 뉴스레터 구독이 제한될 수 있습니다.

개인정보의 처리 위탁 정보
  • 업체명: 스티비 주식회사
  • 위탁 업무 목적 및 범위: 광고가 포함된 뉴스레터 발송 및 수신자 관리
 

개인정보 수집 및 이용

개인정보 수집, 활용 목적 및 기간

(주)티맥스티베로의 개인정보 수집 및 이용 목적은 다음과 같습니다. 내용을 자세히 읽어보신 후 동의 여부를 결정해 주시기 바랍니다.

  • 수집 목적: 티맥스티베로 뉴스레터 발송 및 고객 관리
  • 수집 항목: 성함, 회사명, 회사 이메일, 연락처, 부서명, 직급, 산업, 담당업무, 관계사 여부, 방문 경로
  • 보유 및 이용 기간: 동의 철회 시까지

※ 위 개인정보 수집 및 이용에 대한 동의를 거부할 권리가 있습니다.
※ 필수 수집 항목에 대한 동의를 거부하는 경우 뉴스레터 구독이 제한될 수 있습니다.

개인정보의 처리 위탁 정보

  • 업체명: 스티비 주식회사
  • 위탁 업무 목적 및 범위: 광고가 포함된 뉴스레터 발송 및 수신자 관리
  •