Visual Studio 2026 기반 PostgreSQL 확장(Extension) 컴파일 가이드
작성자: Xavier Fischer (공동 저자: Craig Ringer)
작성일: 2026년 2월 17일
Windows 환경에서 PostgreSQL 확장을 직접 빌드하는 과정이 복잡하다고 느끼셨나요? Visual Studio 2026 커뮤니티 에디션을 사용하면 생각보다 간단하게 해결할 수 있습니다. 이번 포스팅에서는 간단한 예제 확장을 직접 컴파일하며 그 과정을 살펴보겠습니다.
1. 사전 준비 사항
시작하기 전에 아래 항목들이 준비되었는지 확인해 주세요.

- Visual Studio 2026: 본 가이드는 커뮤니티 에디션을 기준으로 설명합니다. PostgreSQL 빌드 시 사용된 버전과 반드시 일치할 필요는 없지만, 대상 PostgreSQL 버전에서 해당 툴킷을 지원하는지는 확인해야 합니다.
- C++를 이용한 데스크톱 개발 워크로드: Visual Studio 설치 관리자(Installer)를 통해 이 워크로드가 반드시 설치되어 있어야 합니다.
- PostgreSQL x64 설치본: 실습을 위해 64비트용 PostgreSQL이 설치된 환경이 필요합니다.
참고 및 주의사항: > 본 가이드는 Windows 11, PostgreSQL 18.2 64비트, Visual Studio 2026(v145 툴체인) 환경에서 테스트를 마쳤습니다. 최신 환경에서는 과거에 번거로웠던 64비트 툴체인 설정이나
libintl.h누락 오류 없이 훨씬 매끄럽게 진행됩니다.
2. 단계별 빌드 절차
단계 1: 프로젝트 생성
- Visual Studio를 실행하고 **파일(File) -> 새로 만들기(New) -> 프로젝트(Project)**를 클릭합니다.
- 빈 프로젝트(Empty Project) C++ 템플릿을 선택합니다.
- 프로젝트 이름은
DemoExtension으로 입력합니다.
단계 2: 소스 파일 추가

- 솔루션 탐색기에서
Source files폴더를 마우스 오른쪽 버튼으로 클릭하고 **추가(Add) -> 새 항목(New Item)**을 선택합니다. - C++ 소스 파일을 생성하되, 파일 확장자를 반드시 **
.c**로 직접 입력해 주세요. (예:DemoExtension.c)- 주의:
.cpp로 생성하면 Visual Studio가 C++로 인식하여 컴파일하며, 이 경우 PostgreSQL과 호환되지 않습니다.
- 주의:
- 아래의 예제 코드를 복사하여 붙여넣습니다. (숫자에 1을 더하는 간단한 함수입니다.)
C
#include "postgres.h"
#include <string.h>
#include "fmgr.h"
#include "utils/geo_decls.h"
#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif
/* MSVC가 심볼을 정상적으로 내보낼(export) 수 있도록 PGDLLEXPORT 프로토타입 추가 */
PGDLLEXPORT Datum add_one(PG_FUNCTION_ARGS);
PG_FUNCTION_INFO_V1(add_one);
Datum
add_one(PG_FUNCTION_ARGS)
{
int32 arg = PG_GETARG_INT32(0);
PG_RETURN_INT32(arg + 1);
}
처음에는 헤더 파일 경로가 잡혀있지 않아 코드에 빨간색 에러 밑줄이 표시됩니다. 이제 프로젝트 설정을 통해 해결해 보겠습니다.
3. 프로젝트 환경 설정 (Configuration)
솔루션 탐색기에서 DemoExtension 프로젝트를 선택하고 속성(Properties) 창을 엽니다.

좌측 상단의 구성(Configuration)을 반드시 “모든 구성(All Configurations)”으로 변경한 후 아래 설정을 진행하세요.

기본 설정 항목
- 일반(General): 구성 형식(Configuration Type)을 **동적 라이브러리(.dll)**로 변경합니다.
- C/C++ -> 코드 생성(Code Generation): C++ 예외 처리(Enable C++ Exceptions)를 **아니요(No)**로 설정합니다.
- C/C++ -> 고급(Advanced): 컴파일 옵션(Compile As)을 **C 코드로 컴파일(/TC)**로 설정합니다.
- 링커(Linker) -> 매니페스트 파일: 매니페스트 생성(Generate Manifest)을 **아니요(No)**로 설정합니다.
- 링커(Linker) -> 입력(Input): 추가 종속성(Additional Dependencies)에 **
postgres.lib**를 추가합니다.
포함 디렉터리 및 라이브러리 경로 설정
이 부분이 핵심입니다. **C/C++ -> 일반 -> 추가 포함 디렉터리(Additional Include Directories)**에 PostgreSQL 설치 경로 내의 다음 폴더들을 순서대로 추가합니다.
...\18\include\server\port\win32_msvc...\18\include\server\port\win32...\18\include\server...\18\include

이후, 링커 -> 일반 -> 추가 라이브러리 디렉터리에 PostgreSQL의 lib 폴더 경로(예: C:\Program Files\PostgreSQL\18\lib)를 등록하고, **라이브러리 종속성 연결(Link Library Dependencies)**을 **아니요(No)**로 설정합니다.
4. 빌드 및 테스트

- 상단 툴바에서 빌드 모드를 Release 및 x64로 선택합니다.
- 프로젝트를 우클릭하고 **빌드(Build)**를 실행합니다. 오류 없이 성공 메시지가 떠야 합니다.
- 생성된
DemoExtension.dll파일을 PostgreSQL의lib디렉터리로 복사합니다.- 경로 예시:
C:\Program Files\PostgreSQL\18\lib
- 경로 예시:
이제 psql이나 pgAdmin을 통해 PostgreSQL에 접속하여 다음 SQL 명령으로 확장을 등록하고 테스트해 봅니다.
SQL
-- C 함수 정의
CREATE FUNCTION add_one(integer) RETURNS integer
AS 'DemoExtension', 'add_one'
LANGUAGE C STRICT;
-- 테스트 실행
SELECT add_one(4);
실행 결과:
Plaintext
add_one
---------
5
(1 row)
성공입니다! 이제 Windows 환경에서도 직접 만든 C 코드를 PostgreSQL 엔진에서 구동할 수 있습니다.
메일: salesinquiry@enterprisedb.com

