PostgreSQL 14 설치 - 소스 컴파일 - dnf 패키지 설치 - Source Compile

Share

Last Updated on 4월 17, 2024 by Jade(정현호)

안녕하세요  
이번 글은 PostgreSQL 14 버전 설치에 대해서 확인 해보도록 하겠습니다.      

PostgreSQL

The PostgreSQL Global Development Group에서 개발하는 오픈 소스 ORDBMS 으로 1996년에 출시 되었습니다. 발음은 '포스트그레스큐엘'이라고 합니다.

The World's Most Advanced Open Source Relational Database 이라는 슬로건을 내세우고 있습니다.


원래 이름은 POSTGRES로, 캘리포니아 버클리 대학 에서 개발한 Ingres 데이터베이스 의 후속 제품으로 그 기원을 언급했습니다.

1996년에 이 프로젝트는 SQL 지원을 반영하기 위해 PostgreSQL로 이름이 변경되었습니다. 2007년 검토 후 개발 팀은 PostgreSQL이라는 이름과 Postgres 라는 별칭을 유지하기로 결정했습니다.

PostgreSQL은 Atomicity, Consistency, Isolation, Durability(ACID) 속성, 자동으로 업데이트 가능한 보기, 구체화된 보기, 트리거, 외부 키 및 저장 프로시저를 포함하는 트랜잭션을 특징으로 합니다.

단일 시스템에서 다수의 동시 사용자가 있는 데이터 웨어하우스 또는 웹 서비스에 이르기까지 다양한 워크로드를 처리하도록 설계되었습니다.

MacOS 서버의 기본 데이터베이스이며 Windows, Linux, FreeBSD, OpenBSD에서도 사용할 수 있습니다.

포스팅 작성 시점에서 최신 버전으로 2022-11-10에 릴리즈 된 15.1 버전이 가장 최신 버전 입니다.

객체 관계 데이터베이스(object-relational database; ORD, ORDB) 또는 객체 관계형 데이터베이스 관리 시스템(object-relational database management system; ORDBMS)은 객체지향 데이터베이스 모델을 가진 관계형 데이터베이스 관리 시스템(RDBMS, 관계 데이터베이스)을 말합니다.

소프트웨어 개발자가 스스로 데이터 형과 메서드(이 두 조합은 객체 지향에서 말하는 객체의 클래스에 해당)를 자유롭게 정의하여 데이터베이스를 개발할 수 있는 데이터베이스 관리 시스템 (DBMS) 입니다.

기존의 RDBMS에 외부 소프트웨어 도구를 추가하여 ORDBMS와 비슷한 기능을 제공하게 할 수도 있는데, 이러한 외부 소프트웨어 도구를 객체 관계 매핑 시스템이라고 부릅니다.

관계 모델을 기반으로 RDBMS 또는 SQL-DBMS는, SQL과 같은 데이터베이스 언어 표준에 의해 사전에 규정된 제한된 데이터 형식 집합에 속하는 데이터에 대해서는 효과적으로 처리할 수 있지만, 객체 지향의 사고방식을 채용한 ORDBMS에서는 소프트웨어 개발자가 스스로 데이터 형식과 방법을 자유롭게 정의하여 데이터베이스를 개발하여 DBMS에 통합시킬 수 있습니다.

ORDBMS 기술의 목표는 소프트웨어 개발자에게 문제 영역을 생각하는 수준까지 데이터베이스 설계의 추상화 수준을 높이는 것이라고 할 수 있습니다.
                  

OS 사전 작업

PostgreSQL 을 설치하기전에 먼저 OS에서 사전 구성 및 설정을 진행 하도록 하겠습니다.

포스팅 환경
- OS : Rocky Linux 8.6
- PostgreSQL : 14.6 버전

설치는 Source Compile패키지 설치, 두 가지 방식에 대해서 기술 되어 있습니다.
            

OS 패키지 설치

OS 패키지 사전 설치 과정으로 해당 과정은 Source Compile 에서 필요한 패키지 및 부수적으로 필요한 패키지 설치 입니다.

sudo dnf install -y readline readline-devel make cmake \
gcc libgcc gcc-c++ make zlib zlib-devel \
perl perl-libs python3 python3-devel \
tcl tcl-devel gettext gettext-devel \
openssl openssl-devel lz4 lz4-devel \
openldap flex bison clang tee \
libxml2 libxml2-devel libxslt libxslt-devel \
llvm llvm-libs llvm-devel \
rsyslog systemd-devel


GNU make는 version 3.80 또는 그 이상 버전이 필요 합니다. 현재 설치된 GNU make 버전을 확인 하기 위해서 아래와 같이 실행하여 확인 할 수 있습니다.

$ make -version
GNU Make 4.2.1
x86_64-redhat-linux-gnu 빌드
Copyright (C) 1988-2016 Free Software Foundation, Inc.
라이선스 GPLv3+: GNU GPL 버전 3 또는 이후 <http://gnu.org/licenses/gpl.html>


rsyslog 가 새로 설치 되었다면(이전에 설치가 되어 있지 않았다면) 아래와 같이 rsyslog 서비스 재시작을 한번 수행 합니다.

sudo systemctl restart rsyslog

        

OS Group 및 User 생성

dnf(yum) 과 같이 패키지로 PostgreSQL 을 설치하면 OS Group 과 User 가 같이 생성 되지만 , 소스 컴파일로 설치할 경우 별도로 유저를 생성 해줘야 합니다.

dnf(yum) 과 같은 패키지 시스템으로 설치 할 경우 해당 과정은 생략 합니다.

• 그룹 및 유저 생성

sudo groupadd postgres

sudo useradd -d /home/postgres -g postgres -m postgres

          

OS 설정

User Limit 과 transparent huge pages disable 에 대해서 설정 하도록 하겠습니다.


limits 설정
/etc/security/limits.conf 파일을 편집하여 아래 내용을 입력합니다.

# 파일 편집
sudo vi /etc/security/limits.conf

## 파일에 아래 내용 입력

# PostgreSQL User
postgres soft nproc 65536
postgres hard nproc 65536
postgres soft nofile 65536
postgres hard nofile 65536



Disable Transparent Huge Pages(THP)
transparent huge pages 를 비활성화 하는 것이 PostgreSQL 사용시 안정성과 더 나은 성능의 이점이 있습니다.

systemd 서비스 파일을 생성하여 기능을 disable 하도록 하겠습니다.

## 서비스 파일 생성
sudo vi /etc/systemd/system/disable-thp.service


## 아래 내용 입력 ##

[Unit]
Description=Disable Transparent Huge Pages (THP)

[Service]
Type=simple
ExecStart=/bin/sh -c "echo 'never' >/sys/kernel/mm/transparent_hugepage/enabled && echo 'never' >/sys/kernel/mm/transparent_hugepage/defrag"

[Install]
WantedBy=multi-user.target


서비스 파일이 생성되었다면 아래와 같은 절차로 서비스를 시작 합니다.

sudo systemctl daemon-reload
sudo systemctl start disable-thp
sudo systemctl enable disable-thp
sudo systemctl status disable-thp


disable-thp 서비스가 시작되었다면 아래와 같은 명령어로 disable 되었는지를 확인 합니다.

cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag

조회결과 [never] 로 선택되어 있다면 비활성화가 된 상태 입니다.
                

PostgreSQL 설치

PostgreSQL 설치를 진행 하도록 하겠습니다.
             

Source Compile

먼저 Source Compile 로 설치에 대해서 다루도록 하겠습니다.
패키지 방식의 설치는 다음 아래에 있습니다.(링크)



설치 파일 다운로드 및 압축 해제
버전 14.6으로 진행 하였습니다.

# 임의의 작업 디렉토리 생성 및 이동
mkdir -p pkg
cd pkg

# Source 파일 다운로드
wget https://ftp.postgresql.org/pub/source/v14.6/postgresql-14.6.tar.gz

# 압축 해제
tar zxvf postgresql-14.6.tar.gz

# 디렉토리 이동
cd postgresql-14.6



configure
먼저 설치할 환경을 설정하는 configure 를 진행 하도록 하겠습니다.
포스팅에서는 설치가 될 디렉토리에 대해서 /usr/local/postgresql-14.6 으로 설정하고 진행 하였습니다.
설치 위치는 아래 구문에서 --prefix= 항목을 변경 하시면 됩니다.

./configure --prefix=/usr/local/postgresql-14.6 \
--with-openssl --with-ssl=openssl --with-lz4 \
--with-libxslt --with-libxml \
--with-python --with-perl --with-tcl \
--with-system-tzdata=/usr/share/zoneinfo \
--with-llvm LLVM_CONFIG=/usr/bin/llvm-config \
--with-systemd



Build and Installation

make && sudo make install
sudo make install-docs

         

Post Action

설치가 완료 되었다면 다음의 후속 작업을 진행 합니다.


PostgreSQL 라이브러리 경로 추가
ld.so.conf 에 경로를 추가하는 작업으로 설치한 디렉토리에 따라서 추가 합니다.

echo "/usr/local/postgresql-14.6/lib" | \
sudo tee -a /etc/ld.so.conf



.bash_profile 에 PATH 설정
생성한 일반 유저 postgres 그리고 root 유저 사용시에는 root 유저의 .bash_profile 에 아래 내용을 입력 합니다.

export PATH=$PATH:/usr/local/postgresql-14.6/bin
export MANPATH=$MANPATH:/usr/local/postgresql-14.6/man


.bash_profile 을 다시 적용 합니다.

source ~/.bash_profile



디렉토리 생성 및 소유권 변경
데이터파일이 저장될 디렉토리 생성 및 소유권 변경을 진행 하도록 하겠습니다.

## 디렉토리 생성
sudo mkdir -p /usr/local/postgresql-14.6/data


## 소유권 변경
sudo chown -R postgres:postgres /usr/local/postgresql-14.6

위의 경로는 각 상황에 따라 달라질수 있으며, 다르게 설정하여 사용할 수 있습니다.


데이터베이스 생성(초기화)
포스팅에서는 "/usr/local/postgresql-14.6/data" 경로에 데이터파일이 생성되는 것으로 해서 데이터베이스를 생성하도록 하겠습니다.

# postgres OS 유저로 switch
sudo -i -u postgres

# 생성
initdb -D /usr/local/postgresql-14.6/data -U postgres


생성시 root 유저로 로그인 한 상태로 실행하게 되면 아래와 같은 에러가 발생합니다.

initdb: cannot be run as root

         

PostgreSQL 시작

설치를 완료한 PostgreSQL 을 시작 하는 방법은 몇 가지가 있으며 포스팅에서는 systemd 서비스를 사용하여 시작 및 종료 하는 것으로 구성 하였습니다.


systemd 서비스 파일 생성
systemd 서비스를 사용하기 위해서는 서비스 파일을 먼저 생성 해야 합니다.

파일의 경로 및 파일명은 아래와 같습니다. 아래의 경로 및 파일명으로 파일을 작성 합니다.
/etc/systemd/system/postgresql.service

[Unit]
Description=PostgreSQL database server
Documentation=man:postgres(1)

[Service]
Type=forking
User=postgres
Environment=PGDATA=/usr/local/postgresql-14.6/data
ExecStart=/usr/local/postgresql-14.6/bin/pg_ctl start -D "${PGDATA}"
ExecStop=/usr/local/postgresql-14.6/bin/pg_ctl stop -D "${PGDATA}"
ExecReload=/usr/local/postgresql-14.6/bin/pg_ctl reload -D "${PGDATA}"
TimeoutSec=0

[Install]
WantedBy=multi-user.target

설치한 경로에 따라서 위의 서비스 파일의 경로를 수정하여 사용 합니다.


서비스 시작
systemd 서비스 파일이 작성이 완료 되었다면 아래의 명령어로 서비스 활성화 및 PostgreSQL 을 시작 합니다.

sudo systemctl daemon-reload
sudo systemctl enable postgresql.service
sudo systemctl start postgresql.service
sudo systemctl stop postgresql.service



접속

sudo -i -u postgres
psql

또는

sudo -i -u postgres psql

            

Package 로 설치

패키지 설치 방식에 대해서 확인 해보도록 하겠습니다.


Repo 추가

# Install the repository RPM
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm



OS 기본 PostgreSQL 모듈을 비활성
OS 기본 Repo 에 있는 PostgreSQL 모듈을 비활성화 합니다.
그래야 별도로 추가한 PostgreSQL Repository 에서 원하는 버전으로 설치가 가능 합니다.

# Disable the built-in PostgreSQL module
sudo dnf -qy module disable postgresql


module disable 수행 하기전 후를 살펴보면 다음과 같습니다.

## Module disable 수행 전
sudo dnf list | grep postgresql | grep server
postgresql-server.x86_64        10.23-1.module+el8.7.0+1118+c6c6f44a  appstream
postgresql-server-devel.x86_64  10.23-1.module+el8.7.0+1118+c6c6f44a  appstream

----------------------------------------------------------------------------------

## Module disable 수행 후
sudo dnf list | grep postgresql | grep server
postgresql11-server.x86_64  11.18-1PGDG.rhel8  pgdg11
postgresql12-server.x86_64  12.13-1PGDG.rhel8  pgdg12
postgresql13-server.x86_64  13.9-1PGDG.rhel8   pgdg13
postgresql14-server.x86_64  14.6-1PGDG.rhel8   pgdg14
postgresql15-server.x86_64  15.1-1PGDG.rhel8   pgdg15



PostgreSQL-Server 설치
포스팅에서는 14.6 으로 설치 하였습니다.

sudo dnf install -y postgresql14-server



데이터베이스 생성(초기화)

sudo /usr/pgsql-14/bin/postgresql-14-setup initdb

데이터파일과 설정파일(postgresql.conf) 파일의 위치는 /var/lib/pgsql/14/data 으로 생성 됩니다.

또한 OS 그룹과 OS계정이 설치 과정에서 생성 됩니다.

grep postgres /etc/passwd
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash



서비스 활성화 및 PostgreSQL 시작

sudo systemctl enable postgresql-14
sudo systemctl start postgresql-14



PostgreSQL 접속

sudo -i -u postgres
psql

또는

sudo -i -u postgres psql



버전 확인

$ psql
psql (14.6)
도움말을 보려면 "help"를 입력하십시오.

postgres=# show server_version;
 server_version
----------------
 14.6
(1개 행)



여기 까지 해서 PostgreSQL 설치를 간단하게 살펴보았고, 이번 포스팅은 여기서 마무리 하도록 하겠습니다.
          

Reference

Reference URL
namu.wiki/PostgreSQL
wikipedia.org/PostgreSQL
wikipedia.org/객체_관계_데이터베이스
postgresql.org/installation.html
postgresql.org/server-start.html
postgresql.org/runtime-config-resource.html
enterprisedb.com/tuning-and-optimization

              

2
0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x