一、編譯準備
1.1 pg_repack下載
pg_repack下載位置:https://pgxn.org/dist/pg_repack/1.4.6/
目前最新版本為4.6版本
1.2 postgres版本選擇
編譯時需要在編譯機器上安裝postgre,官網(wǎng)可以下載到的版本是9.6.21,經(jīng)測試9.6.21可以使用
二、編譯pg_repack
注:已經(jīng)做完以下所有配置和修改的代碼打包為pg_repack-1.4.6_modify.zip,使用vs2013打開解壓之后其中的msvc文件夾下的pg_repack.sln即可編譯。
2.1使用vs2013打開pg_repack
pg_repack-1.4.6.zip解壓得到pg_repack-1.4.6目錄,進入pg_repack-1.4.6\msvc可以看到2010的sln文件,經(jīng)測試vs2013版本也可以正常編譯,使用vs2013打開pg_repack.sln并升級,可以看到bin和lib兩個項目
2.2添加并選擇pg_repack 64位編譯配置
鼠標右鍵點擊解決方案pg_repack,選擇配置屬性->配置,可以看到bin和lib兩個項目都是32位平臺下的配置,如下圖所示:

我們需要x64位平臺配置,點擊右上角配置管理器,點擊如下圖紅框所標示的下拉按鈕位置,并選擇新建

新平臺選擇x64,并選擇從Win32復(fù)制,如下圖

新建完成之后返回到配置屬性->配置,選擇剛剛新建的x64平臺,選擇完成如下圖:

2.3禁用將警告視為錯誤
bin和lib兩個項目都要禁用將警告視為錯誤,以下以bin項目為例,lib項目同理。
bin項目禁用將警告視為錯誤:選中bin項目,點擊鼠標右鍵,選擇配置屬性->C/C++->常規(guī),將警告視為錯誤選擇否,如下圖:

lib項目進行同樣的操作。
2.4注冊PostgreSQL的目錄
bin和lib兩個項目都要注冊PostgreSQL的包含目錄和庫目錄,以下以bin項目為例,lib項目同理。
bin項目添加包含目錄:選中bin項目,點擊鼠標右鍵,選擇配置屬性->VC++目錄,選擇如下圖所示的下拉位置并點擊編輯

添加PostgreSQL的頭文件目錄(根據(jù)實際PostgreSQL安裝目錄決定):
C:\Program Files\PostgreSQL\9.6\include
C:\Program Files\PostgreSQL\9.6\include\internal
C:\Program Files\PostgreSQL\9.6\include\server
C:\Program Files\PostgreSQL\9.6\include\server\port\win32
C:\Program Files\PostgreSQL\9.6\include\server\port\win32_msvc
添加完成后如下圖所示:

bin項目添加庫目錄:選中bin項目,點擊鼠標右鍵,選擇配置屬性->VC++目錄,選擇庫目錄位置,如下圖,

添加PostgreSQL的庫文件目錄(根據(jù)實際PostgreSQL安裝目錄決定):
C:\Program Files\PostgreSQL\9.6\bin
C:\Program Files\PostgreSQL\9.6\lib
添加完成后如下圖所示:

lib項目同樣的操作,注冊PostgreSQL的包含目錄和庫目錄。
2.5刪除lib項目不存在的源文件
lib項目src路徑下有一個不存在的文件pgut-be.c,選中并delete即可。刪除之后如下圖

2.6 bin項目修改鏈接庫
選中bin項目,點擊鼠標右鍵,選擇配置屬性->鏈接器->輸入,選擇附加依賴項并展開選擇編輯

1、libintl-8.lib修改為libintl.lib
2、添加postgres.lib
修改完成之后如下圖所示

2.7打入版本號
bin和lib兩個項目在編譯時無法打入版本號,所以對源代碼repack.c和pg_repack.c文件進行了修改,修改之后如下

bin項目為例,點擊鼠標右鍵,選擇配置屬性->C/C++->命令行,在其它選項框中填入/D "WIN_BUILD",如下圖:

lib項目需要做同樣的配置
2.8編譯項目
分別選中bin和lib兩個項目(不分先后),鼠標右鍵選擇生成。
生成的文件在pg_repack-1.4.6\msvc\x64\Release相對路徑下,有pg_repack.dll和pg_repack.exe兩個文件
三、插件文件匯總
注:已經(jīng)做完編譯和修改的文件在壓縮包中可以看到
3.1 pg_repack二進制文件
上邊編譯好的pg_repack.dll和pg_repack.exe兩個文件
3.2 pg_repack擴展安裝輔助文件
在pg_repack-1.4.6\lib相對路徑下有pg_repack.sql.in和pg_repack.control.in兩個文件,分別拷貝為pg_repack.sql和pg_repack.control
打開pg_repack.sql文件,將REPACK_VERSION替換為版本號1.4.6

修改之后為

打開pg_repack.control文件
將REPACK_VERSION替換為版本號1.4.6;替換module_pathname的值為實際的插件安裝DLL文件的路徑(插件安裝在后續(xù)介紹)

修改之后

四、插件安裝
4.1放入插件相關(guān)文件
以下描述使用相對路徑,均為pStor中PostgreSQL的路徑
1、pg_repack--1.4.6.sql和pg_repack.control放入到PostgreSQL\share\extension\中
2、pg_repack.dll和pg_repack.exe放入到PostgreSQL\bin\中
注意pg_repack.control中module_pathname的值與pg_repack.dll路徑位置一致
4.2登錄到數(shù)據(jù)庫并添加插件
1、登錄到想要使用插件的數(shù)據(jù)庫(cmd中PostgreSQL\bin\路徑下運行,注:使用管理員用戶,否則權(quán)限不夠無法添加)
psql.exe -h hostname -p port -d database_name -U super_user
2、 安裝插件(在登錄之后的提示命令中執(zhí)行),
執(zhí)行命令:create extension pg_repack;
使用\dx列出插件看是否安裝成功

注:卸載插件命令(drop extension pg_repack;)
3、 檢查是否安裝成功(在cmd中PostgreSQL\bin\路徑下運行,應(yīng)該輸出pg_repack版本號)
pg_repack --version