이 글은 이 글을 쓰는 시점과 그 비슷한 시기(적어도 1년 이내) 정도에 쓸모 있는 글입니다.
세월 지나면 그다지 쓸모 없어질 것입니다.
windows 11 환경 (cpu는 인텔, int 비트는 64 비트, x86_64 ) 에서 빌드해 보았습니다.
plpython, openssl, .... 이런 부가 모듈들을 모두 제외한 빌드였습니다.
출발은
https://www.postgresql.org/docs/current/install-windows.html
페이지 글이고요.
Visual Studio 2022 커뮤니티 버전을 설치하고,
windows 용 perl을 설치해야하는데,
windows 용으로 제일 유명한 ActiveState Perl 로는 빌드가 되지 않았습니다.
(이 빌드 실패가 이 perl 문제 였다는 것을 알게되는데까지 시간이 꽤 걸렸습니다.)
다음 방법으로 다른 perl을 찾았고, Strawberry Perl 설치하고,
윗 빌드 문서 대로 해서 잘 설치되었습니다.
perl 실행 환경과 msvc 빌드환경이 통합되어야 함으로,
msvc 명령행 환경 실행해서 쉘 창을 연 뒤, perl 실행 환경 배치 파일도 실행해서 통합니다.
다음 build 작업을 하면 됩니다.
다음 pg_hint_plan 모듈을 구하고, 빌드하기 - 이것도 꽤 오랜 시행 착오가 있었습니다.
일단 pg_hint_plan 모듈을 postgresql 버전별로 소스 패키지를 따로 배포합니다.
https://github.com/ossc-db/pg_hint_plan/releases
해당 디비 버전 전에 맞는 소스를 구해서,
postgresql src 안 contrib 안으로 pg_hint_plan 으로 압축을 풀어두고, contrib/Makefile 안에 pg_hint_plan 모듈을 추가합니다.
SUBDIRS 값으로 추가하는거죠. 보면 쉽게 이해할겁니다.
다음 \src\tools\msvc 안으로 가서 build 작업을 다시 합니다.
그러면,
소스 최상위 디렉터리에, pg_hint_plan.vcxproj 파일이 만들어지고, build는 plpgsql.h 파일이 없어 빌드를 실패한다고 합니다.
여기서 꼼수,
제가 MS 빌드에 대해서 잘 몰라서 제가 한 방법은
일단 perl 환경과, msvs ide 환경이 통합된 환경으로 비주얼 스튜디오 ide를 열고, pgsql.sln 솔루션 파일을 열고,
pg_hint_plan 프로젝트의 header 참조 디렉터리를 추가하고, (src/pl/plpgsql/src 입니다)
ide 안에서 pg_hint_plan 프로젝트를 빌드하는 것이였습니다.
아무튼 이렇게 하면 빌드됩니다.
다음은 쉘에서 install.bat 작업으로 다시 설치하면 pg_hint_plan.dll 파일이 엔진 lib 디렉터리 안에 잘 설치됩니다.
꽤 긴시간의 시행착오와 꼼수를 난발한 빌드 작업이었습니다. 오래간만에 windows 에서 재미나게 놀았네요.
이렇게 만들어진 dll 파일이
https://github.com/i0seph/pg_hint_plan_windows_binary/releases/download/v1.5/pg_hint_plan.dll
이놈입니다.
나머지 필요한 것은 소스 파일에서 가져와 쓰세요.
이 dll 사용 조건이
윈도우즈 11, 64bit
마이크로소스트 VC++ 재배포 런타임 라이브러리는 VCRUNTIME140.dll
PostgreSQL 15 버전 (이 postgres.exe 파일의 dll 의존성이 윗 라이브러리를 참조하는 경우에만 해당합니다.)
이 조건이면 빌드 안하고 써도 될거에요.
|