PostgreSQL Server 설치 프로그램에는 인스톨러 버전과 zip archive 버전이 있습니다. 이글에서는 zip archive 버전을 다운로드 받아 압축을 해제하여 데이터베이스 클러스터 작성 , 서비스 등록, 서버 기동/정지하는 방법을 소개하겠습니다. 실제 시연 과정은 유튜브에서 보실 수 있습니다. (YoutTube영상)
소프트웨어 다운로드 및 설치 환경
- 설치 대상 PostgreSQL버전&다운로드 공식 사이트
- PostgreSQL 14.1-1 for Windows x86-64
- postgresql-14.1-1-windows-x64-binaries.zip
- https://www.enterprisedb.com/download-postgresql-binaries
- 참고로 이 글의 버전보다 더 최신버전이 존재하면 최신버전을 사용하십시오.
- PostgreSQL 서버 설치 대상 윈도우즈 서버 컴퓨터
- OS : Windows Server 2012R2
- IP Address(예) : 192.168.220.129
- psql 클라이언트 컴퓨터
- OS : Windows 10 Pro
- IP Address(예) : 192.168.220.128
소프트웨어 설치하기
- 다음 화면과 같이 공식 사이트에서 다운로드 한 postgresql-14.1-1-windows-x64-binaries.zip 파일을 C:\temp에 저장 후 [파일 선택 > 오른쪽 마우스 클릭 > 텍스트 메뉴 > 압축 풀기(T)…] 를 실행합니다.
- 다음 화면과 같이 압축 풀기의 저장 장소로 C:\app\PostgreSQL를 지정하고 [압축 풀기(E)] 버튼을 누릅니다.
- 다음 화면과 같이 압축 풀기 진행 상황을 표시됩니다. 100% 완료까지 기다립니다.
- 압축을 푼 결과 파일은 다음과 같이 C:\app\PostgresQL디렉토리의 pgsql디렉토리로 저장됩니다.
- C:\app\PostgresQL\pgsql의 pqsql디렉토리 명을 14로 변경합니다. 필수는 아닙니다.
- 최종적으로 다음과 같이 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
데이터베이스 클러스터 작성하기
“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 로고 키 + R] -> [실행] 창 -> [services.msc] 입력 후 엔터 키를 눌러 [서비스]화면을 표시합니다.
서비스 목록에서 postgresql-X64-xx서비스가 “정지 중” 상태임을 확인합니다. 실행 아이콘을 클릭하여 “실행 중” 상태로 변경합니다.
postgresql-X64-xx서비스를 선택하여 툴바의 속성 아이콘을 누르면 다음과 같이 상세 정보를 확인 할 수 있습니다.
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 방화벽] 화면의 인바운드 규칙에서 [새 규칙…]을 눌러 [새 인바운드 규칙 마법사] 화면을 표시합니다.
[새 인바운드 규칙 마법사] 화면의 [단계:규칙 종류]에서 [포트(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=#
인스톨러 버전 설치에 대해서
다음 글을 참조 하십시오.