Postgres 9.2 설치하기

Oracle Linux 8 환경에 PostgreSQL 9.2.24 버전을 설치하는 것은 매우 까다롭습니다.


PostgreSQL 9.2는 매우 오래된 버전으로, Oracle Linux 8의 기본 저장소는 물론, PostgreSQL 공식 yum 저장소에도 포함되어 있지 않습니다. 이 버전은 보안 업데이트가 중단되어 다수의 취약점이 존재하므로, 운영 환경에서는 절대 사용하지 않는 것을 강력히 권장합니다.


만약 반드시 이 버전을 사용해야 한다면, 소스 코드를 직접 컴파일하여 설치해야 합니다.

PostgreSQL 9.2.24 소스 컴파일 설치 방법

아래 과정은 의존성 충돌 및 기타 문제가 발생할 수 있으므로 주의해서 진행해야 합니다.

  1. 필요한 빌드 도구 및 라이브러리 설치:

    sudo dnf groupinstall "Development Tools"
    sudo dnf install readline-devel zlib-devel openssl-devel
  2. PostgreSQL 9.2.24 소스 코드 다운로드:

    wget https://ftp.postgresql.org/pub/source/v9.2.24/postgresql-9.2.24.tar.gz
  3. 소스 압축 해제:

    tar -xzf postgresql-9.2.24.tar.gz
    cd postgresql-9.2.24
  4. 소스 컴파일 및 설치:

    • 설치 경로는 /usr/local/pgsql로 설정합니다.

    <!-- end list -->
    ./configure --prefix=/usr/local/pgsql
    make
    sudo make install
  5. **postgres 사용자 및 데이터 디렉터리 설정:

    • PostgreSQL 서비스 전용 사용자를 생성합니다.

    <!-- end list -->
    sudo useradd postgres
    sudo mkdir -p /usr/local/pgsql/data
    sudo chown postgres:postgres /usr/local/pgsql/data
  6. 데이터베이스 초기화 및 시작:

    • postgres 사용자로 전환하여 데이터베이스를 초기화합니다.

    <!-- end list -->
    sudo -i -u postgres
    /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
    /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
  7. 환경 변수 설정:

    • psql과 같은 명령어를 쉽게 실행할 수 있도록 PATH에 설치 경로를 추가합니다. ~/.bash_profile 파일을 수정합니다.

    <!-- end list -->
    echo 'export PATH=/usr/local/pgsql/bin:$PATH' >> ~/.bash_profile
    echo 'export LD_LIBRARY_PATH=/usr/local/pgsql/lib:$LD_LIBRARY_PATH' >> ~/.bash_profile
    source ~/.bash_profile

이 과정을 통해 PostgreSQL 9.2.24를 설치할 수 있지만, 다시 한번 말씀드리지만 보안상의 이유로 새로운 프로젝트에서는 권장되지 않습니다. 만약 가능하다면, Oracle Linux 8에서 기본 지원하는 PostgreSQL 12 이상 버전을 사용하는 것을 강력히 추천합니다.


PostgreSQL 9.2.24 버전을 소스 코드로 설치하셨군요. 이 경우 systemctl 서비스 파일이 자동으로 생성되지 않습니다.


따라서 PostgreSQL 9.2 서비스를 systemctl로 관리하려면, 직접 서비스 파일을 생성해야 합니다.

1. PostgreSQL 9.2 서비스 파일 생성

root 권한으로 postgresql-9.2.service 파일을 /etc/systemd/system/ 디렉터리에 생성합니다.

sudo nano /etc/systemd/system/postgresql-9.2.service

파일에 다음 내용을 복사하여 붙여넣습니다. ExecStartExecReload 경로를 설치 경로에 맞게 수정해야 합니다. (이전에 /usr/local/pgsql로 설치했다고 가정)

[Unit]
Description=PostgreSQL 9.2 database server
After=network.target

[Service]
Type=forking
User=postgres
Group=postgres

Environment=PGDATA=/usr/local/pgsql/data

ExecStart=/usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data -l /usr/local/pgsql/data/logfile
ExecReload=/usr/local/pgsql/bin/pg_ctl reload -D /usr/local/pgsql/data
ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D /usr/local/pgsql/data

[Install]
WantedBy=multi-user.target

2. systemctl 서비스 등록 및 활성화

파일을 저장하고 종료한 후, systemctl에 방금 생성한 서비스를 등록하고 활성화합니다.

# systemctl 데몬 새로고침
sudo systemctl daemon-reload

# PostgreSQL 9.2 서비스 시작
sudo systemctl start postgresql

PostgreSQL 9.2 서비스가 정상적으로 실행 중이므로, 이제 Windows의 DBeaver에서 접속할 수 있도록 설정을 진행해야 합니다.

1. WSL IP 주소 확인

Windows DBeaver가 접속할 WSL의 IP 주소를 확인해야 합니다. 이 IP 주소는 WSL 재시작 시 변경될 수 있습니다.

  • WSL 터미널에서 실행:

    ip addr show eth0 | grep inet
    • 출력된 결과 중 inet 뒤에 있는 IP 주소(예: 172.19.16.14)를 메모해 두세요.

2. PostgreSQL 외부 접속 설정

PostgreSQL 서버가 외부 접속을 허용하도록 설정 파일을 수정해야 합니다.

  1. **postgresql.conf 파일 수정:

    • 다음 명령어로 파일을 엽니다. (설치 경로가 /usr/local/pgsql라고 가정)

    <!-- end list -->
    sudo nano /usr/local/pgsql/data/postgresql.conf
    • listen_addresses 라인을 찾아 #을 제거하고 *로 변경합니다.

    <!-- end list -->
    listen_addresses = '*'
  2. **pg_hba.conf 파일 수정:

    • 다음 명령어로 파일을 엽니다.

    <!-- end list -->
    sudo nano /usr/local/pgsql/data/pg_hba.conf
    • 파일의 맨 아래에 다음 라인을 추가하여 외부 접속을 허용합니다.

    <!-- end list -->
    host    all     all     0.0.0.0/0       md5

3. PostgreSQL 서비스 재시작

설정 파일 변경 내용을 적용하려면 서비스를 재시작해야 합니다.

sudo systemctl restart postgresql-9.2

4. DBeaver 연결 설정

DBeaver를 열고 새로운 PostgreSQL 연결을 생성합니다.

  • Host: 위에서 확인한 WSL의 IP 주소

  • Port: 5432 (기본값)

  • Database: 접속할 데이터베이스 이름 (예: spc_wsl)

  • Username: postgres

  • Password: postgres (이전에 설정한 비밀번호)

설정을 저장하고 연결을 테스트하면 DBeaver에서 PostgreSQL 9.2 데이터베이스에 성공적으로 접속할 수 있습니다.


PostgreSQL 9.2 서비스가 성공적으로 재시작되었고, active (running) 상태로 정상 작동하고 있습니다.


하지만 psql -V 명령어를 실행했을 때 여전히 PostgreSQL 13.21이 출력되는 것은 심각한 문제입니다. 이는 9.2 서버는 실행 중인데, 13 클라이언트로 접속을 시도하게 되어 호환성 문제를 일으킬 수 있습니다.

해결 방법: psql 클라이언트 버전 일치

psql 명령어가 PostgreSQL 9.2 버전을 가리키도록 PATH 환경 변수를 다시 설정해야 합니다.

  1. 환경 변수 파일 확인:

    • 이전에 /etc/profile.d/psql.sh 파일을 생성했습니다. 이 파일을 열어 경로가 올바르게 설정되었는지 확인합니다.

    <!-- end list -->
    sudo nano /etc/profile.d/psql.sh
    • 파일 내용이 아래와 같은지 확인하고, /usr/local/pgsql/bin 경로가 PATH의 가장 앞에 오도록 합니다.

    <!-- end list -->
    export PATH=/usr/local/pgsql/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/pgsql/lib:$LD_LIBRARY_PATH
  2. 환경 변수 적용:

    • 파일을 수정한 후, 다음 명령어를 실행하여 변경 사항을 즉시 적용합니다.

    <!-- end list -->
    source /etc/profile.d/psql.sh
  3. 재확인:

    • 새로운 터미널 세션을 열거나 source 명령을 실행한 후, 다시 psql -V를 실행하여 버전이 9.2.24로 출력되는지 확인합니다.

    <!-- end list -->
    psql -V

이제 psql 클라이언트와 서버 버전이 일치되어 DBeaver 접속 문제 없이 작업을 진행할 수 있을 것입니다.


PostgreSQL 데이터베이스의 postgres 사용자 비밀번호를 postgres로 설정하고, 새로운 데이터베이스를 생성하는 방법입니다.

단계별 설정 방법

  1. **postgres 사용자로 psql에 접속:

    • root 권한에서 sudo -u postgres 명령어를 사용하여 postgres 시스템 사용자로 전환하고 psql에 접속합니다.

    <!-- end list -->
    sudo -u postgres psql
  2. 비밀번호 설정 및 데이터베이스 생성:

    • psql 프롬프트(postgres=#)가 나타나면 다음 SQL 명령어를 실행합니다.

    <!-- end list -->
    -- 'postgres' 사용자의 비밀번호를 'postgres'로 설정합니다.
    ALTER USER postgres WITH PASSWORD 'postgres';
    
    -- spc_wsl 데이터베이스가 없다면 생성합니다.
    CREATE DATABASE spc_wsl;
  3. **psql 종료:

    • 설정이 완료되면 \q 명령어를 입력하여 psql을 종료합니다.

    <!-- end list -->
    \q

이제 postgres 사용자의 비밀번호가 postgres로 설정되었고, DBeaver에서 이 정보로 데이터베이스에 접속할 수 있습니다.


제공해주신 오류 메시지는 PostgreSQL 서버가 실행 중이 아니거나, psql 클라이언트가 서버에 연결하기 위해 필요한 소켓 파일을 찾지 못해서 발생하는 문제입니다.


systemctl status에서는 서비스가 실행 중이라고 나왔지만, psql 클라이언트가 "/run/postgresql/.s.PGSQL.5432" 경로에서 서버 소켓 파일을 찾지 못해 연결에 실패한 것입니다. 이는 서버가 다른 경로에 소켓 파일을 생성했거나, 소켓을 사용하지 않도록 설정되었기 때문입니다.

해결 방법: TCP/IP를 사용하여 접속

가장 빠르고 확실한 해결책은 소켓 연결 대신 TCP/IP를 사용하여 접속하는 것입니다. 이렇게 하면 서버가 정상적으로 실행 중인지 확인할 수 있습니다.

  1. **psql 명령어로 접속:

    • 다음 명령어를 실행하여 로컬호스트(localhost)에 TCP/IP로 접속을 시도합니다.

    <!-- end list -->
    psql -h localhost -U postgres
    • -h localhost: TCP/IP 연결을 시도

    • -U postgres: postgres 사용자로 접속

  2. 비밀번호 입력:

    • postgres 사용자의 비밀번호를 입력하라는 메시지가 나오면 이전에 설정했던 비밀번호를 입력합니다.

이 방법으로 접속이 성공하면 PostgreSQL 서버는 정상적으로 실행 중이며, 소켓 경로 설정에 문제가 있었다는 뜻입니다. 접속에 성공한 후에는 이전에 안내해 드린 ALTER USERCREATE DATABASE 명령어를 실행하시면 됩니다.

2 Comments
Jordan Singer
2d
Lorem ipsum, dolor sit amet consectetur adipisicing elit. Non minima ipsum at amet doloremque qui magni, placeat deserunt pariatur itaque laudantium impedit aliquam eligendi repellendus excepturi quibusdam nobis esse accusantium.
2 replies
Brandon Smith
2d
Lorem ipsum dolor sit, amet consectetur adipisicing elit.
James Parsons
1d
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio dolore sed eos sapiente, praesentium.
Santiago Roberts
4d
Lorem ipsum dolor sit amet consectetur adipisicing elit. Iusto laborum in corrupti dolorum, quas delectus nobis porro accusantium molestias sequi.