PG HINT PLAN 설치 과정은 약간 복잡합니다.
SELECT * FROM pg_available_extensions; -- 설치 가능한 확장팩
SELECT * FROM pg_extension; -- 설치된 확장팩
PG는 힌트를 사용하기 위해서 확장팩인 pg_hint_plan을 설치해야 합니다.
아래 경로에서 pg_hint_plan rpm 파일을 다운로드 합니다.
여기서는 pg_hint_plan17-1.7.1-1.pg17.rhel10.x86_64.rpm 파일을 다운로드합니다.
정확히 해당 파일을 다운로드 하는 것을 권장합니다. 아래 파일을 바로 다운로드 하셔도 됩니다.

다운로드 받은 파일을, C 드라이드에 mypg17_pg_hint_plan 이란 폴더에 카피해놓습니다.
다운로드 받은 파일을 PG 컨테이너에 올려야 하는데, 파일 단위가 아닌 폴더 단위로만 올릴 수 있습니다. 그러므로 폴더 하나에 다운로드한 rpm 파일 하나만 놓도록 합니다.

rpm 파일을 컨테이너에 업로드합니다.
containers를 선택합니다.
mypg 컨테이너를 선택합니다.

Files를 선택합니다.
tmp 디렉토리에 마우스 우클릭 후 import를 선택합니다.
앞에서 만든 mypg17_pg_hint_plan 폴더를 선택하면 해당 폴더 채로 컨테이너에 업로드가 됩니다.

업로드된 폴더를 확인할 수 있습니다.

rpm 파일을 설치합니다.
Docker Desktop에서 컨테이너에 진입해 Exec 메뉴를 클릭합니다.
여기서 Linux Shell 명령어를 실행할 수 있습니다.

아래 명령어들을 차례대로 하나씩 입력합니다.
apt update
apt install alien
alien -d /tmp/mypg17_pg_hint_plan/pg_hint_plan17-1.7.1-1.pg17.rhel10.x86_64.rpm
dpkg -i pg-hint-plan17_1.7.1-2_amd64.deb
계속해서 EXEC창에서 다음 명령어로 pg_hint_plan이 컨테이너에 잘 설치되어 있는지 확인합니다.
ls /usr/pgsql-17/lib/
설치된 파일을 정상적인 경로로 카피해서 옮깁니다.
cp -a /usr/pgsql-17/share/extension/* /usr/share/postgresql/17/extension/
pg_hint_plan을 PG의 conf 파일에 등록합니다.
컨테이너의 Files 메뉴를 선택
postgresql.conf 를 마우스 우클릭 후 Edit File을 선택합니다.
아래 부분에 파일의 내용이 열립니다. shared_preload_libraries 부분의 주석을 제거하고 다음과 같이 수정합니다.
기본 설치된 경로가 문제인지, 경로 없이 pg_hint_plan을 바로 설정하면 제대로 작동하지 않습니다.
shared_preload_libraries = 'pg_stat_statements, /usr/pgsql-17/lib/pg_hint_plan' # (change requires restart)
오른쪽 위에 저장 버튼을 누릅니다.
컨테이너를 종료했다. 다시 시작합니다.


추가로, postgresql.conf (var/lib/postgresql/data) 에서 병렬 처리를 제한합니다.
max_parallel_workers_per_gather 부분을 찾아서 주석을 제거하고 값을 0으로 설정합니다.
저장합니다.
종료 후 다시 시작합니다.
max_parallel_workers_per_gather = 0 # limited by max_parallel_workers
