[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을 복사했습니다