Database
Windows 용 PostgresSQL 17 에 hypopg 확장 컴파일 및 설치 하기
달빛에취하다
2026. 6. 2. 16:48
작성일 - 2026-06-02 16:40
Windows 용 pgSQL 17 에 hypopg 확장을 컴파일 해서 설치하는 내용입니다.
공식지원이나 AI 쪽에서 레퍼런스가 없습니다. 그래서 아래 환경이나 프로그램은 되도록이면 맞춰서 진행해야 합니다.
능력자 분들께서는 각 개인 환경에 맞춰서 진행해 주시면 됩니다.
좋은 내용이 있으면 댓글도 부탁드립니다.
1. Visual Studio Build Tool ( 2016 ) - 설치
1.1. 워크로드
- C++를 사용한 데스크톱 개발
- MSVC v143 - VS 2022 C++ x64/x86 빌드 도구 (v14.44) <← 14.44 가 꼭 필요함

1.2. 개별 구성 요소
- Windows 유니버셜 C 런타임
- Windows 유니버셜 CRT SDK
- Windows 11 SDK (10.0.22621.0) → 되도록이면 preview 버전 말고 공식 버전

2. Developer Command Prompt for VS
2.1. 관리자 권한으로 실행

2.2. MSVC 14.44 환경 로드
call "C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Auxiliary\Build\vcvars64.bat" -vcvars_ver=14.44

3. hypopg 확장
3.1. git clone 및 폴더 복제
- git 이 미리 설치 되어 있어야 함
C:\Windows\System32>d:
D:\>git clone https://github.com/HypoPG/hypopg.git
Cloning into 'hypopg'...
remote: Enumerating objects: 2112, done.
remote: Counting objects: 100% (462/462), done.
remote: Compressing objects: 100% (127/127), done.
remote: Total 2112 (delta 375), reused 340 (delta 334), pack-reused 1650 (from 1)
Receiving objects: 100% (2112/2112), 733.26 KiB | 5.27 MiB/s, done.
Resolving deltas: 100% (1413/1413), done.
D:\>cd hypopg
D:\hypopg>xcopy .\include .\import\include /E /I /H /Y
.\include\hypopg.h
.\include\hypopg_import.h
.\include\hypopg_import_index.h
.\include\hypopg_index.h
4개 파일이 복사되었습니다.
D:\hypopg>
3.2. Makefile.win 파일 작성
- 되도록이면 VS CODE 같은 것으로 작성
- Windows SDK 버전이 다른 경우 경로를 찾아서 변경
- MSVC의 14.44 의 세부 버전이 다른 경로 해당 경로로 변경 필요
- Makefile.win 파일 내용
PGROOT = C:/Program Files/PostgreSQL/17
CC = cl
LINK = link
INCLUDE = \
/I"$(PGROOT)/include/server" \
/I"$(PGROOT)/include/internal" \
/I"$(PGROOT)/include" \
/I"$(PGROOT)/include/server/port/win32_msvc" \
/I"C:/Program Files (x86)/Microsoft Visual Studio/18/BuildTools/VC/Tools/MSVC/14.44.35207/include" \
/I"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/ucrt" \
/I"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/um" \
/I"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/shared" \
/I"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/cppwinrt" \
/I"$(PGROOT)/include/server/port/win32"
CFLAGS = /nologo /O2 /DWIN32 /D_WINDOWS $(INCLUDE)
OBJS = \
hypopg.obj \
hypopg_index.obj \
import/hypopg_import.obj \
import/hypopg_import_index.obj
all: hypopg.dll
hypopg.dll: $(OBJS)
$(LINK) /DLL /OUT:hypopg.dll $(OBJS) \
"$(PGROOT)/lib/postgres.lib" \
/INCREMENTAL:NO
hypopg.obj: hypopg.c
$(CC) $(CFLAGS) /c hypopg.c /Fo$@
hypopg_index.obj: hypopg_index.c
$(CC) $(CFLAGS) /c hypopg_index.c /Fo$@
import/hypopg_import.obj: import/hypopg_import.c
$(CC) $(CFLAGS) /c import/hypopg_import.c /Fo$@
import/hypopg_import_index.obj: import/hypopg_import_index.c
$(CC) $(CFLAGS) /c import/hypopg_import_index.c /Fo$@
clean:
cmd.exe /C "del /Q *.obj 2>NUL"
cmd.exe /C "del /Q import\\*.obj 2>NUL"
cmd.exe /C "del /Q hypopg.dll 2>NUL"
3.3. 컴파일
# 이건 생성된 파일 초기화 - 오류 등으로 중단 경우
nmake /F Makefile.win clean
# Makefile.win 으로 컴파일
nmake /F Makefile.win


3.4. 파일 복사
D:\hypopg>**copy hypopg.dll "C:\Program Files\PostgreSQL\17\lib\"**
1개 파일이 복사되었습니다.
D:\hypopg>**copy hypopg.control "C:\Program Files\PostgreSQL\17\share\extension\"**
1개 파일이 복사되었습니다.
D:\hypopg>**copy hypopg--*.sql "C:\Program Files\PostgreSQL\17\share\extension\"**
hypopg--1.3.1--1.4.0.sql
hypopg--1.3.1.sql
hypopg--1.4.0--1.4.1.sql
hypopg--1.4.0.sql
hypopg--1.4.1--1.4.2.sql
hypopg--1.4.1.sql
hypopg--1.4.2.sql
7개 파일이 복사되었습니다.
D:\hypopg>
4. 가상 인덱스 테스트
4.1. 확장 프로그램 생성? 활성화?
CREATE EXTENSION IF NOT EXISTS hypopg;
4.2. 테스트 테이블 생성 및 데이터 생성
-- 1. 테스트 테이블 생성 및 데이터 생성
CREATE TABLE hypo_test (id serial PRIMARY KEY, val integer, name text);
INSERT INTO hypo_test (val, name)
SELECT (random()*100000)::int, 'name_' || g
FROM generate_series(1, 100000) g;
ANALYZE hypo_test;
4.3. 인덱스 없는 상태의 플랜 확인 (Seq Scan 확인)
-- 2. 인덱스 없는 상태의 플랜 (Seq Scan 나올 것)
EXPLAIN SELECT * FROM hypo_test WHERE val = 5000;

4.4. 가상 인덱스 생성 (실제 디스크에는 안 만들어짐)
-- 3. 가상 인덱스 생성 (실제 디스크에는 안 만들어짐)
SELECT * FROM hypopg_create_index('CREATE INDEX ON hypo_test (val)');

4.5. 4.3. 와 같은 쿼리의 EXPLAIN 다시 확인 (Index Scan으로 바뀌면 성공)
-- 3. 가상 인덱스 생성 (실제 디스크에는 안 만들어짐)
SELECT * FROM hypopg_create_index('CREATE INDEX ON hypo_test (val)');

4.6. 인덱스 예상 크기 확인 - (byte)
- 4.4. 에서 확인되는 indexid 를 사용함
--예상 크기 확인 (4.3. 에서 확인되는 indexid 를 사용함 )
SELECT hypopg_relation_size(14942);

4.7. 인덱스 삭제
-- 전체 삭제
SELECT hypopg_reset();
-- 특정 인덱스 삭제
SELECT hypopg_drop_index(14942);
4.8. 전체 가상 인덱스 정보
-- 전체 가상 인덱스 목록
SELECT * FROM hypopg_list_indexes;
-- 좀더 세부 정보
SELECT * FROM hypopg();