[Windows Server 2019] PostgreSQL 16 Windows x64 버전 설치하기(인스톨러 사용)

PostgreSQL Server 설치 프로그램에는 인스톨러 버전zip archive 버전이 있습니다. 이 글에서는 인스톨러 버전을 다운로드 받아 PostgreSQL Server 소프트웨어를 설치하고 데이터베이스 클러스터 작성, 서비스 등록, 서버 기동/정지하는 방법을 소개 하겠습니다.

소프트웨어 다운로드 및 설치 환경

  • 설치 대상 PostgreSQL버전&다운로드 공식 사이트
  • PostgreSQL 서버 설치 대상 윈도우즈 서버 컴퓨터
    • OS : Windows Server 2019
  • IP Address(예) : 192.168.1.84
  • psql 클라이언트 컴퓨터
    • OS : Windows 11 Home
    • IP Address(예) : 192.168.1.92

소프트웨어 설치하기

공식 사이트에서 다운로드 한 postgresql-16.0-1-windows-x64.exe 파일을 선택해서 관리자 권한으실행합니다.

우선 설치 시작 화면이 표시됩니다. [Next>] 버튼을 눌러 다음으로 진행합니다.

다음 Installation Directory 입력 화면에서는 PostgreSQL 소프트웨어를 설치할 장소를 지정합니다. 여기서는 C:\app\PostgreSQL\16를 지정했습니다. [Next>] 버튼을 눌러 다음으로 진행합니다.

다음 Select Components 화면에서는 설치할 소프트웨어 종류를 선택합니다. [Next>] 버튼을 눌러 다음으로 진행합니다.

  • PostgreSQL Server : 데이터베이스 클러스터 작성/운영를 위한 소프트웨어를 설치합니다.
  • pgAdmin 4 : 별도로 다운로드 설치를 위해 여기서는 설치하지 않습니다.
  • Stack Builder : 추가적인 프로그램을 설치를 위해서 필요합니다만 여기서는 설치하지 않고 진행합니다.
  • Command Line Tools : psql.exe등 명령 프롬프트 창에서 실행하는 클라이언트 소프트웨어를 설치합니다. 참고로 Command Line Tools만 설치하고 싶다면 “PostgreSQL Windows에서 psql클라이언트가 포함된 오직 “Command Line Tools”만 설치하기” 글을 참조하십시오.

다음 Data Directory 설정 화면에서는 초기 데이터베이스 클러스터를 작성할 장소를 지정합니다. 여기서는 C:\app\PostgreSQL\16\data를 지정했습니다 . 여기서부터 마지막까지의 Setup Wizard 설치는 수동 설치 시에 사용하는 “initdb -U postgres -A password -E utf8 -W -D C:\app\PostgreSQL\16\data” 명령과 같습니다. [Next>] 버튼을 눌러 다음으로 진행합니다.

다음 Password 설정 화면에서는 초기 데이터베이스 클러스터의 수퍼유저 postgres의 비밀번호를 지정합니다. 여기서는 manager를 지정했습니다. [Next>] 버튼을 눌러 다음으로 진행합니다.

유저/패스워드(postgres/manager)

다음 Port 설정 화면에서는 클라이언트 프로그램(psql.exe , pgAdmin4등)으로부터의 작업 요구에 대한 tcp 리스너 포트 번호를 지정합니다. [Next>] 버튼을 눌러 다음으로 진행합니다.

다음 Advanced Options 설정 화면에서는 지역을 선택합니다. [Default locale]은 Windows OS 의 [설정 > 시간 및 언어]에 지정된 지역, 사용지역 언어, 표준 시간대에 따라 설정이 바뀝니다. 여기서는 한글 Windows Server 2019 OS 이기 때문에 Korean_Korea로 설치됩니다. 데이터베이스에 저장되는 문자 코드는 UTF-8입니다만 지역에 따라 표준 시간대 , 날짜형식, 문자 나열 순서가 다르기 때문에 주의 해서 지정해야 합니다. 글로벌 사용을 원한다면 [C]를 선택하십시오. [Next>] 버튼을 눌러 다음으로 진행합니다.

다음 Pre Installation Summary 화면에서는 설치 시의 요약 정보를 표시합니다. 설치 내용에 문제가 없으면 [Next>] 버튼을 눌러 다음으로 진행합니다.

  • Installation Directory: C:\app\PostgreSQL\16
  • Server Installation Directory: C:\app\PostgreSQL\16
  • Data Directory: C:\app\PostgreSQL\16\data
  • Database Port: 5432
  • Database Superuser: postgres
  • Operating System Account: NT AUTHORITY\NetworkService
  • Database Service: postgresql-x64-16
  • Command Line Tools Installation Directory: C:\app\PostgreSQL\16

다음 Ready to Install 화면은 설치 준비 완료 알림 화면입니다. [Next>] 버튼을 눌러 설치를 시작합니다.

다음 Installing 화면은 설치 진행 상태을 표시하는 화면입니다. 설치가 끝나면 [Next>] 버튼이 활성화 됩니다. [Next>] 버튼을 눌러 Finish화면으로 넘어갑니다.

다음은 설치 종료 알림 화면입니다. [Finish] 버튼을 눌러 창을 닫습니다.

데이터베이스 서비스 확인

[ Windows 로고 키Windows Key  + R] -> [실행] 창 -> [services.msc] 입력 후 엔터 키를 눌러 [서비스] 화면을 표시합니다.

서비스 일람에서 postgresql-X64-xx 서비스가 실행 중 상태임을 확인합니다.

postgresql-X64-xx 서비스를 선택하여 툴바의 속성 아이콘을 누르면 다음과 같이 상세 정보를 확인할 수 있습니다.

“C:\app\PostgreSQL\16\bin\pg_ctl.exe” runservice -N “postgresql-x64-16” -D “C:\app\PostgreSQL\16\data” -w

메뉴 등록 확인하기

[Windows 로고 키Windows Key]를 클릭하여 다음과 같이 설치된 소프트웨어 리스트를 확인할 수 있습니다.

실행 파일의 %PATH%경로 확인하기

명령 프롬프트에서 환경변수 %PATH%값을 echo명령으로 확인하면 환경 변수 PATH에 PostgreSQL 실행 파일 패스 [c:\app\PostgreSQL\16\bin;]가 존재하지 않음을 확인할 수 있습니다.

시스템 환경 변수 psql 명령 경로 추가 확인하기

[시스템 속성 > 환경변수 > 시스템 변수]의 특수 환경 변수 %PATH% 에 [c:\app\PostgreSQL\16\bin;] 경로를 추가합니다.

특수 환경 변수 %PATH%에 대해서는 “Windows MS-DOS 환경 변수 설정 방법” 과 “Windows MS-DOS 특수 환경 변수 %PATH%” 글을 참조 하십시오.

psql.exe명령으로 로컬 접속 확인하기

명령 프롬프트 창에서 psql.exe 명령으로 접속할 수 있는지 확인합니다. 접속에 문제가 없다면 다음과 같이 접속 결과를 표시합니다.

C:\>psql -U postgres
postgres 사용자의 암호:manager
psql (13.5)
도움말을 보려면 "help"를 입력하십시오.
postgres=#

또는 [Windows 로고 키Windows Key]를 클릭하여 메뉴 등록된 [SQL Shell(psql)]를 실행해서 다음 화면과 같이 접속합니다. Server, Database, Port, Username에서 [Enter]를 누르면 기본값이 설정됩니다. postgres 사용자의 암호는 프로그램 설치 시에 설정했던 유저/패스워드(postgres/manager) 입니다.

postgres=# \l
                                      데이터베이스 목록
   이름    |  소유주  | 인코딩 |     Collate      |      Ctype       |      액세스 권한
-----------+----------+--------+------------------+------------------+-----------------------
 postgres  | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 |
 template0 | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 | =c/postgres          +
           |          |        |                  |                  | postgres=CTc/postgres
 template1 | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 | =c/postgres          +
           |          |        |                  |                  | postgres=CTc/postgres
(3개 행)

외부 컴퓨터에서 psql.exe명령으로 원격 접속 확인하기

방화벽 Listener Port 허가하기

초기 데이터베이스 클러스터를 작성 직후 외부 컴퓨터에서 psql.exe 명령으로 원격 접속하면 다음과 같은 오류가 발생합니다.

C:\>psql -h 192.168.1.91 -U postgres
psql: error: could not connect to server: Connection timed out (0x0000274C/10060)
        Is the server running on host "192.168.220.130" and accepting
        TCP/IP connections on port 5432?

“psql: error: could not connect to server: Connection timed out (0x0000274C/10060) ” Error를 해결하기 위해서는 다음과 같이 Windows Defender 방화벽에 PostgreSQL Listener Port 5432을 허가합니다.

[제어판 > 모든 제어판 항목] 화면에서 “Windows Defender 방화벽” 아이콘을 클릭해서 [제어판 > 모든 제어판 항목 > Windows Defender 방화벽] 설정 화면을 표시합니다.

그리고 [제어판 > 모든 제어판 항목 > Windows Defender 방화벽] 설정 화면의 왼쪽 메뉴에서 [고급 설정] 링크를 눌러 [고급 보안이 포함된 Windows Defender 방화벽] 화면을 표시합니다.

제어판\모든 제어 항목\Windows Defender 방화벽

마지막으로 [고급 보안이 포함된 Windows Defender 방화벽] 화면의 인바운드 규칙에서 [새 규칙…]을 눌러 [새 인바운드 규칙 마법사] 화면을 표시합니다.

[새 인바운드 규칙 마법사] 화면의 [단계:규칙 종류]에서 [포트(O)]를 선택하고 [다음(N)] 버튼을 눌러 다음 화면으로 진행합니다.

[새 인바운드 규칙 마법사] 화면의 [단계:프로토콜 및 포트]에서 [TCP(T)]를 선택, [특정 로컬 포트(S)]에서 5432 값을 입력하고 [다음(N)] 버튼을 눌러 다음 화면으로 진행합니다.

[새 인바운드 규칙 마법사] 화면의 [단계:작업]에서 [연결 허용(A)]을 선택하고 [다음(N)] 버튼을 눌러 다음 화면으로 진행합니다.

[새 인바운드 규칙 마법사] 화면의 [단계:프로필]에서 [도메인(D)], [개인(P)], [공용(U)]을 모두 체크 하고 [다음(N)] 버튼을 눌러 다음 화면으로 진행합니다.

[새 인바운드 규칙 마법사] 화면의 [단계:이름]에서 [이름(N):PostgreSQL]과 [설명(옵션)(D): PostgreSQL 13.5-2 for Windows x86-64 Listener]을 입력하고 [마침(N)] 버튼을 눌러 [고급 보안이 포함된 Windows Defender 방화벽] 화면으로 돌아갑니다.

[새 인바운드 규칙 마법사] 화면의 인바우드 규칙에서 오른쪽 마우스 클릭하면 [새로 고침] 콘텍스트 메뉴가 표시됩니다. 여기서 [새로 고침]을 눌러 PostgreSQL 인바운드 규칙이 추가 되었음을 확인합니다.

postgresql.conf 수정하기

Windows Defender 방화벽에 PostgreSQL Listener Port 5432을 허가했음에도 불구하고 같은 오류가 발생할 경우, postrgesql.conf를 확인합니다.

postgresql.conf 에서 #listen_addresses = ‘localhost’ 또는 listen_addresses = ‘localhost’로 되어 있으면 외부 컴퓨터에서는 접속할 수 없고 localhost(자기 자신의 내부)에서만 접속할 수 있습니다.
listen_addresses = ‘*’로 변경해서 모든 외부 컴퓨터에서 접속할 수 있도록 해야 합니다.

주의) 변경 내용을 적용하기 위해서는 “postgresql-x64-13” 서비스 재기동을 해야 합니다.

pg_hba.conf 수정하기

Windows Defender 방화벽에 PostgreSQL Listener Port 5432을 허가했음에도 불구하고 다음과 같은 오류가 발생할 경우, pg_hba.conf를 확인합니다.

C:\>psql -h 192.168.220.130 -U postgres
psql: error: FATAL:  no pg_hba.conf entry for host "192.168.220.128", user "postgres", database "postgres", SSL off
또는 
psql: error: 치명적오류:  호스트 "192.168.220.128", 사용자 "postgres", 데이터베이스 "postgres", no encryption 연결에 대 한 설정이 pg_hba.conf 파일에 없습니다.

위 오류를 해결하기 위해서는
Linux에 설치된 PostgreSQL 서버의 경우 $PGDATA/pg_hba.conf를 수정합니다.
Windows에 설치된 PostgreSQL 서버의 경우 %PGDATA%\pg_hba.conf를 수정합니다.
이 글에서는 %PGDATA%의 값이 C:\app\data이므로 C:\app\data\pg_hba.conf를 수정합니다.

다음과 같이 192.168.1.0/24를 지정하면 IP 주소가 192.168.1.x인 모든 호스트의 모든 사용자가 사용자 암호를 올바르게 입력하면 “postgres” 데이터베이스에 연결할 수 있습니다.
인증 방법은 password 또는 scram-sha-256으로 설정합니다. 비밀번호 입력 없이 접속하고자 한다면 인증 방법을 trust로 변경하십시오.

C:\>notepad  C:\app\data\pg_hba.conf
... 중간 생략 ...
# IPv4 local connections:
host    all         all     127.0.0.1/32   password
host    all       all    192.168.220.130/24   password
... 중간 생략 ...

주의) 변경 내용을 적용하기 위해서는 “postgresql-x64-16” 서비스를 재기동 해야 합니다.

Windows Defender 방화벽에 PostgreSQL Listener Port 5432을 허가하고 postgresql.conf, pg_hba.conf 파일 수정함으로써 다음과 같이 외부 컴퓨터에서 psql 명령으로 원격 접속할 수 있음을 확인 할 수 있습니다.

C:\>psql -U postgres
postgres 사용자의 암호:manager
psql (13.5)
도움말을 보려면 "help"를 입력하십시오.
postgres=#

zip archive 버전을 사용한 설치에 대해서

다음 글을 참조 하십시오.

[Windows Server 2012] PostgreSQL 14 Windows x64 버전 설치하기(zip archive 사용)
PostgreSQL Server 설치 프로그램에는 인스톨러 버전과 zip archive 버전이 있습니다. 이글에서는 zip archive 버전을 다운로드 받아 압축을 해제하여 데이터베이스 클러스터 작성 , 서비스 등...

환경변수

다음과 같이 환경변수를 설정해 놓으면 옵션 지정없이 psql명령 만으로 환경변수의 데이터베이스에 접속합니다.

set PGHOST=192.168.1.91
set PGPORT=5432
set PGDATABASE=postgres
set PGUSER=postgres
set PGPASSWORD=manager

댓글

제목과 URL을 복사했습니다