[Windows Server 2012] PostgreSQL 14 Windows x64 버전 설치하기(zip archive 사용)

스폰서 링크
PostgreSQL
스폰서 링크

PostgreSQL Server 설치 프로그램에는 인스톨러 버전zip archive 버전이 있습니다. 이글에서는 zip archive 버전을 다운로드 받아 압축을 해제하여 데이터베이스 클러스터 작성 , 서비스 등록, 서버 기동/정지하는 방법을 소개하겠습니다. 실제 시연 과정은 유튜브에서 보실 수 있습니다. (YoutTube영상)

스폰서 링크

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

  • 설치 대상 PostgreSQL버전&다운로드 공식 사이트
  • PostgreSQL 서버 설치 대상 윈도우즈 서버 컴퓨터
    • OS : Windows Server 2012R2
    • IP Address(예) : 192.168.220.129
  • psql 클라이언트 컴퓨터
    • OS : Windows 10 Pro
    • IP Address(예) : 192.168.220.128

소프트웨어 설치하기

  1. 다음 화면과 같이 공식 사이트에서 다운로드 한 postgresql-14.1-1-windows-x64-binaries.zip 파일을 C:\temp에 저장 후 [파일 선택 > 오른쪽 마우스 클릭 > 텍스트 메뉴 > 압축 풀기(T)…] 를 실행합니다.
  1. 다음 화면과 같이 압축 풀기의 저장 장소로 C:\app\PostgreSQL를 지정하고 [압축 풀기(E)] 버튼을 누릅니다.
  1. 다음 화면과 같이 압축 풀기 진행 상황을 표시됩니다. 100% 완료까지 기다립니다.
  1. 압축을 푼 결과 파일은 다음과 같이 C:\app\PostgresQL디렉토리의 pgsql디렉토리로 저장됩니다.
  1. C:\app\PostgresQL\pgsql의 pqsql디렉토리 명을 14로 변경합니다. 필수는 아닙니다.
  1. 최종적으로 다음과 같이 C:\app\PostgreSQL\14에 저장됩니다.

각각의 디렉토리의 설명은 다음과 같습니다.

  • bin : PostgreSQL Server 데이터베이스 클러스터 작성/운영을 위한 소프트웨어 또는 psql.exe등 명령 프롬프트 창에서 실행하는 클라이언트 소프트웨어 저장 디렉토리
  • pgAdmin 4 : 브라우저에서 실행되는 데이터베이스 클라이언트 소프트웨어 저장 디렉토리
  • Stack Builder : 추가적인 프로그램을 설치를 위한 디렉토리

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

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

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

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

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

데이터베이스 클러스터 작성 데이터 디렉토리 준비하기

우선 데이터베이스 클러스터를 작성하기 위한 디렉토리 C:\app\data를 작성합니다. 작성된 디렉토리는 다음 화면과 같습니다.

참고로 PostgreSQL에서는 %PGDATA%환경 변수에 데이터베이스 클러스터 디렉토리를 설정합니다.

데이터 디렉토리 사용자 풀 액세스 권한 허용

initdb명령을 실행하는 사용자가 C:\app\data 디렉토리에 풀 액세스 할 수 있도록 권한을 허용합니다.

이 글에서 로그인 사용자는 Administrator입니다. [ data 디렉토리 선택 > 오른쪽 마우스 클릭 > 컨텍스트 메뉴 > 속성 ]을 눌러 [data 속성] 화면을 표시 후 [보안] 탭을 선택합니다. 다음과 화면과 같이 사용 권한에 Administrator 사용자가 추가되어 있지 않음을 확인할 수 있습니다.

[data 속성] 화면에서 [편집] 버튼을 눌러 [data의 사용 권한] 화면을 표시합니다.

[data의 사용 권한] 화면 에서 [추가]버튼을 눌러 [사용자 또는 그룹 선택] 화면을 표시합니다. 그리고 사용자 이름 Administrator을 입력하고 [이름 확인(C)]버튼을 눌러 등록된 사용자임을 확인합니다. 이름 확인에 문제가 없다면 [확인] 버튼을 눌러 [data의 사용 권한] 화면으로 돌아 갑니다.

[data의 사용 권한] 화면에는 다음과 같이 선택한 사용자 Administrator가 추가되어 있음을 확인 할 수 있습니다. 그리고 Administrator를 선택해서 모든 권한을 체크 한 다음, [적용] 과 [확인] 순서로 버튼을 눌러 [data 속성] 화면으로 돌아 갑니다.

[data 속성] 화면에서도 사용자 Administrator가 추가되어 있음을 확인하고 모든 권한이 체크 되어 있음을 확인한 후 [확인] 버튼을 눌러 설정을 완료합니다.

참고로 권한을 부여하지 않으면 initdb로 데이터베이스 클러스터를 작성할 때 다음과 같이 오류가 발생합니다.

C:\>initdb -U postgres -A password -E utf8 -W -D C:\app\data
이 데이터베이스 시스템에서 만들어지는 파일들은 그 소유주가 "Administrator" id로
지정될 것입니다. 또한 이 사용자는 서버 프로세스의 소유주가 됩니다.

데이터베이스 클러스터는 "Korean_Korea.949" 로케일으로 초기화될 것입니다.
initdb: "Korean_Korea.949" 로케일에 알맞은 전문검색 설정을 찾을 수 없음
기본 텍스트 검색 구성이 "simple"(으)로 설정됩니다.

자료 페이지 체크섬 기능 사용 하지 않음

새 superuser 암호를 입력하십시오:
암호 확인:

이미 있는 C:/app/data 디렉터리의 액세스 권한을 고치는 중 ...initdb: 오류: "C:/ap
p/data" 디렉터리의 액세스 권한을 바꿀 수 없습니다: Permission denied

아래 [PostgreSQL 데이터베이스 서비스 등록]을 위해 Administrator와 동일한 방법으로 NETWORK SERVICE에 대해서도 풀 액세스 권한을 부여합니다.

데이터베이스 클러스터 작성하기

initdb -U postgres -A password -E utf8 -W -D C:\app\data” 명령을 사용하여 데이터 베이스 클러스터를 작성합니다.

C:\>initdb -U postgres -A password -E utf8 -W -D C:\app\data
이 데이터베이스 시스템에서 만들어지는 파일들은 그 소유주가 "Administrator" id로
지정될 것입니다. 또한 이 사용자는 서버 프로세스의 소유주가 됩니다.
데이터베이스 클러스터는 "Korean_Korea.949" 로케일으로 초기화될 것입니다.
initdb: "Korean_Korea.949" 로케일에 알맞은 전문검색 설정을 찾을 수 없음
기본 텍스트 검색 구성이 "simple"(으)로 설정됩니다.
자료 페이지 체크섬 기능 사용 하지 않음
새 superuser 암호를 입력하십시오:manager
암호 확인:manager
이미 있는 C:/app/data 디렉터리의 액세스 권한을 고치는 중 ...완료
하위 디렉터리 만드는 중 ...완료
사용할 동적 공유 메모리 관리방식을 선택하는 중 ... windows
max_connections 초기값을 선택하는 중 ...100
기본 shared_buffers를 선택하는 중... 128MB
기본 지역 시간대를 선택 중 ... Asia/Tokyo
환경설정 파일을 만드는 중 ...완료
부트스트랩 스크립트 실행 중 ... 완료
부트스트랩 다음 초기화 작업 중 ... 완료
자료를 디스크에 동기화 하는 중 ... 완료

작업완료. 이제 다음 명령을 이용해서 서버를 가동 할 수 있습니다:

    pg_ctl -D ^"C^:^\app^\data^" -l 로그파일 start

이 글에서는 superuser 암호에 manager를 입력했습니다.

참고로 이 글에서는 한글 Windows Server 2012R2 OS이기 때문에 Korean_Korea로 설치 됩니다.–locale옵션 지정으로 다른 지역을 선택할 수 있습니다. –locale옵션을 생략한다면 Default locale은 Windows OS 의 [설정 > 시간 및 언어]에 지정된 지역, 사용지역 언어, 표준 시간대에 따라 설정됩니다. 데이터 베이스에 저장되는 문자 코드는 UTF-8입니다만 지역에 따라 표준 시간대 , 날짜형식, 문자 나열 순서가 다르기 때문에 주의해서 지정해야 합니다. 글로벌 사용을 원한다면 –locale=C 옵션을 추가 하십시오.
initdb -U postgres -A password -E utf8 -W -D C:\app\data –locale=C

PostgreSQL 데이터베이스 서비스 등록하기

pg_ctl.exe register -N "postgresql-x64-14" -U "NT AUTHORITY\NetworkService" -D C:\app\data -w -S auto

참고로 서비스에서 삭제하는 명령은 다음과 같습니다.

pg_ctl.exe unregister -N "postgresql-x64-14"

PostgreSQL 데이터베이스 서비스 확인

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

서비스 목록에서 postgresql-X64-xx서비스가 “정지 중” 상태임을 확인합니다. 실행 아이콘을 클릭하여 “실행 중” 상태로 변경합니다.

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

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

zip archive 버전을 사용한 데이터베이스 작성 결과

zip archive 버전 설치 결과는 다음과 같습니다. 수동으로 설치 명령을 직접 실행해서 설치했지만 인스톨러 버전과 큰 차이는 없습니다.

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

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

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

C:\>psql -U postgres
postgres 사용자의 암호:manager
psql (14.1)
도움말을 보려면 "help"를 입력하십시오.
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개 행)

postgres=#

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

방화벽 Listener Port 허가하기

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

C:\>psql -h 192.168.220.129 -U postgres
psql: error: could not connect to server: Connection timed out (0x0000274C/10060)
        Is the server running on host "192.168.220.129" 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 방화벽” 또는 “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 14.1-1 for Windows x86-64 Listener]을 입력하고 [마침(N)] 버튼을 눌러 [고급 보안이 포함된 Windows Defender 방화벽] 화면으로 돌아갑니다.

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

postgresql.conf 수정하기

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

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

#listen_addresses = 'localhost'	# what IP address(es) to listen on;
listen_addresses = '*'

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

pg_hba.conf 수정하기

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

C:\>psql -h 192.168.220.129 -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.220.0/24를 지정하면 IP 주소가 192.168.220.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.0/24   password
... 중간 생략 ...

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

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

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

인스톨러 버전 설치에 대해서

다음 글을 참조 하십시오.

눈깨비 정보창고 - 분기탱천
마우스 영역 지정 이미지 캡처를 문자 인식 및 번역하기 버튼 클릭 만으로  을 실행 해 주는 소프트웨어를 작성 했습니다. 자세한 도움말은 여기를 참조 하십시오. 웹 서비스 구축 눈깨비가 본업으로 하고 있는 기술적인 ...
제목과 URL을 복사했습니다