본문 바로가기
리눅스/데이터베이스

리눅스(CentOS)에서 postgresql을 설치해보자!

안녕하세요.

 

야생에서 등장한 하프개발자 입니다 😊

 

미루고 미루던 postgresql 포스팅을 해보려 합니다

 

 

📝 목차
 

 

 


 

Yum으로 설치

1. postgresql 라이브러리 설치

yum으로 postgresql을 설치해주도록 합시다.

yum install -y postgresql
yum install -y postgresql-server

 

 

2. 계정명 확인

성공적으로 설치가 되었으면, 계정이 잘 생성되었는지 확인합시다!

자동으로 생성되니 따로 만들지 않아도 됩니다!

id postgres

 

 

 

3. postgresSQL 실행 시  사용되는 계정정보 확인

ls -l /usr/lib/systemd/system/postgresql.service

 

 

 

4. postgreSQL 초기화

postgreSQL을 초기화 하기 위해서는 다음과 같은 명령어를 입력하면 됩니다.

postgresql-setup initdb

 

 

하지만 가상머신이나 WSL에서 명령어 실행 시 D-Bus 관련 오류가 나는 경우가 있습니다.

 

Failed to get D-Bus connection: Operation not permitted

failed to find PGDATA setting in postgresql.service

저를 많이 괴롭히던 오류지요 🫠

 

우선 D-Bus란, Desktop과 데이터를 주고받는 Bus를 의미합니다.

명령어를 통해 데스크롭의 소프트웨어와 통신을 주고받아야 하는데, 데스크톱에 Linux를 직접 설치한게 아니므로 소프트웨어와 데이터 통신을 주고 받을 수 없다 는 의미입니다.

 

WSL이나 가상머신의 경우 systemctl의 명령어를 교체해줘야지만 사용이 가능합니다!

mv /usr/bin/systemctl /usr/bin/systemctl.old
curl https://raw.githubusercontent.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl.py > /usr/bin/systemctl
chmod +x /usr/bin/systemctl

 

 

 

그런 후 다시 postgresql-setup initdb를 하게 되면, 데이터베이스 오케이!! 뜨는걸 볼 수 있네요

 

 

4. postgreSQL 실행

postgreSQL 실행은 systemctl 명령어를 사용하여 키고 끄고 할 수 있습니다!

//상태 확인
systemctl status postgresql

//서비스 시작
systemctl start postgresql
systemctl enable postgresql

//상태 확인
systemctl status postgresql

 

 

5. 결과 확인

root계정으로는 postgresql에 접속할 수 없으니, 생성된 postgres 계정으로 접속을 해야합니다!

//postgres계정변경
su - postgres

//database 접속
psql

 

 

 

똑같이 DBeaver에서도 확인을 해볼게요 😊

계정 정보는 다음과 같습니다

host : localhost
database : postgres
username : postgres
password : postgres (passwd 명령어로 변경가능!)

 

 

 

 

커넥션을 해보면!! 아니..? 뭔 에러야 또

FATAL: Ident authentication failed for user "postgres"

 

 

 

역시 이쯤되면 한번에 되는게 이상할지경..

 

전에도 우린은행 FIS랑 협업할때도 발생했던 오류기는 한데.. 해결방법은 간단합니다!

vi /var/lib/pgsql/data/pg_hba.conf 요기로 이동한 뒤에 맨 아래로 내리게 되면 local관련 설정하는 옵션이 있을겁니다!

 

 

저 부분을 아래 처럼 변경하면 됩니다!

 

 

 

그런 후 root 계정에서 서비스 재시작을 해주고!!

systemctl restart postgresql

 

 

다시 시작 한 뒤  DBeaver로 Test Connection을 날려줍시다!

 

이러고 사용하면 됩니다.


 

압축 파일로 설치

위에서 Yum으로 했지만, 압축 파일로도 설치하는걸 보여드려야 하기에 CentOS를 한번 밀어버렸습니다!

 

 

Yum으로도 되는데 굳이 압축파일로 설치를 해야하는이유는 무엇일까요?

개발 시 실제로 공공기관, 은행권, 공항권 등등 SI업체가 인트라넷을 사용하며 인터넷이 안됩니다 🫠

 

그러면 외부로부터 파일로 받고 내부에서 설치를 해야 하는 상황이 오는것이죠!

그럼 바로 설치 해보겠습니다.

 

1. 필요 라이브러리

postgreSQL을 설치하기 위해선.. 다양한 라이브러리 먼저 설치가 진행이 되어야 합니다.

대부분의 경우 설치가 되어있겠지만, 없는경우 추가 설치가 필요하니 참고하시면 되겠습니다.

 yum install -y gcc

 

 

2. 파일 다운로드

wget 명령어를 사용해서 다운을 받거나, 압축 파일을 받으시면 됩니다.

🔗 https://ftp.postgresql.org/pub/source/v16.2/postgresql-16.2.tar.gz

 

 

3. 사용자 생성

postgres는 root로 실행이 불가능하기 때문에 따로 사용자를 만들어주어야 합니다!

adduser postgres
passwd postgres
비밀번호 입력 : postgres
비밀번호 재 입력 : psotgres
su - postgres

 

 

4. 압축 해제

다운로드 받은 파일을 리눅스로 옮긴다음 postgres계정으로 로그인 후  압축해제 합니다.

tar -xvf postgresql-16.2.tar.gz
cd postgresql-16.2

 

 

5. postgreSQL 설치

압축 해제한 뒤 컴파일 하는 명령어를 입력해봅시다!

--prefix 명령어는 설치할 디렉토리 경로를 설정하는 것이므로, 다른 계정으로 만들었다면 다르게 입력을 하면 됩니다!

./configure --prefix=/home/postgres/postgresql --without-readline --without-zlib --without-icu

 

 

만들어진 파일들을 빌드해봅시다!

그러면  엄청나게 먼가 많이 나오면서 설치가 될겁니다

시간이 좀 걸려요! 🫠

make
make install

 

 

설치가 잘 되었다면 폴더가 생성이 되었을 겁니다!

cd /home/postgres/postgresql
ll

 

 

 

셋팅까지 해봅시다!

아래의 코드를 붙여넣기 하면 됩니다.

 cd /home/postgres/postgresql/bin
./initdb -D /home/postgres/postgresql/data
./postgres -D /home/postgres/postgresql/data >logfile 2>&1 & 
./psql

 

 

6. DB 가동

DB 상태 확인

./pg_ctl status -D /home/postgres/postgresql/data

 

 

DB 재시작

./pg_ctl restart -D /home/postgres/postgresql/data

 

 

7. 결과 확인

DBeaver에서 연결이 되는지 확인을 해보겠습니다!

host : localhost
database : postgres
username : postgres
password : postgres (passwd 명령어로 변경가능!)

 

 

오.. 이번에는 한번에 되는군요

이젠 한번에 되면 잘못된것만 같은... 🥹

 


 

이렇게 설치까지 끝났습니다!

외부 접속 설정에 대해서는 여러가지 설정할게 많아서 포스팅 하지는 않았습니다!

설치만 해도 꽤나 복잡하지요 🥹

 

여기까지 작성하며 글을 마치도록 하겠습니다!

 

도움이 되는 글이길 바라며 이만 물러가겠습니다.

 

 

 

참고문헌

https://hapajay.tistory.com/60 - 디비 설정
https://yjae-sw.tistory.com/120?category=939542 - 디비 설정
https://8ugust-dev.tistory.com/5 - systemctl 변경