一、編譯準(zhǔn)備
1.1 pg_repack下載
pg_repack下載位置:https://pgxn.org/dist/pg_repack/1.4.6/
目前最新版本為4.6版本
1.2 postgres版本選擇
編譯時(shí)需要在編譯機(jī)器上安裝postgre默责,官網(wǎng)可以下載到的版本是9.6.21闽撤,經(jīng)測(cè)試9.6.21可以使用
二根穷、編譯pg_repack
注:已經(jīng)做完以下所有配置和修改的代碼打包為pg_repack-1.4.6_modify.zip,使用vs2013打開(kāi)解壓之后其中的msvc文件夾下的pg_repack.sln即可編譯。
2.1使用vs2013打開(kāi)pg_repack
pg_repack-1.4.6.zip解壓得到pg_repack-1.4.6目錄,進(jìn)入pg_repack-1.4.6\msvc可以看到2010的sln文件,經(jīng)測(cè)試vs2013版本也可以正常編譯喻鳄,使用vs2013打開(kāi)pg_repack.sln并升級(jí),可以看到bin和lib兩個(gè)項(xiàng)目
2.2添加并選擇pg_repack 64位編譯配置
鼠標(biāo)右鍵點(diǎn)擊解決方案pg_repack确封,選擇配置屬性->配置除呵,可以看到bin和lib兩個(gè)項(xiàng)目都是32位平臺(tái)下的配置,如下圖所示:
我們需要x64位平臺(tái)配置爪喘,點(diǎn)擊右上角配置管理器竿奏,點(diǎn)擊如下圖紅框所標(biāo)示的下拉按鈕位置,并選擇新建
新平臺(tái)選擇x64腥放,并選擇從Win32復(fù)制泛啸,如下圖
新建完成之后返回到配置屬性->配置,選擇剛剛新建的x64平臺(tái)秃症,選擇完成如下圖:
2.3禁用將警告視為錯(cuò)誤
bin和lib兩個(gè)項(xiàng)目都要禁用將警告視為錯(cuò)誤候址,以下以bin項(xiàng)目為例,lib項(xiàng)目同理种柑。
bin項(xiàng)目禁用將警告視為錯(cuò)誤:選中bin項(xiàng)目岗仑,點(diǎn)擊鼠標(biāo)右鍵,選擇配置屬性->C/C++->常規(guī)聚请,將警告視為錯(cuò)誤選擇否荠雕,如下圖:
lib項(xiàng)目進(jìn)行同樣的操作稳其。
2.4注冊(cè)PostgreSQL的目錄
bin和lib兩個(gè)項(xiàng)目都要注冊(cè)PostgreSQL的包含目錄和庫(kù)目錄,以下以bin項(xiàng)目為例炸卑,lib項(xiàng)目同理既鞠。
bin項(xiàng)目添加包含目錄:選中bin項(xiàng)目,點(diǎn)擊鼠標(biāo)右鍵盖文,選擇配置屬性->VC++目錄嘱蛋,選擇如下圖所示的下拉位置并點(diǎn)擊編輯
添加PostgreSQL的頭文件目錄(根據(jù)實(shí)際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項(xiàng)目添加庫(kù)目錄:選中bin項(xiàng)目,點(diǎn)擊鼠標(biāo)右鍵五续,選擇配置屬性->VC++目錄洒敏,選擇庫(kù)目錄位置,如下圖疙驾,
添加PostgreSQL的庫(kù)文件目錄(根據(jù)實(shí)際PostgreSQL安裝目錄決定):
C:\Program Files\PostgreSQL\9.6\bin
C:\Program Files\PostgreSQL\9.6\lib
添加完成后如下圖所示:
lib項(xiàng)目同樣的操作凶伙,注冊(cè)PostgreSQL的包含目錄和庫(kù)目錄。
2.5刪除lib項(xiàng)目不存在的源文件
lib項(xiàng)目src路徑下有一個(gè)不存在的文件pgut-be.c它碎,選中并delete即可函荣。刪除之后如下圖
2.6 bin項(xiàng)目修改鏈接庫(kù)
選中bin項(xiàng)目,點(diǎn)擊鼠標(biāo)右鍵链韭,選擇配置屬性->鏈接器->輸入偏竟,選擇附加依賴(lài)項(xiàng)并展開(kāi)選擇編輯
1煮落、libintl-8.lib修改為libintl.lib
2敞峭、添加postgres.lib
修改完成之后如下圖所示
2.7打入版本號(hào)
bin和lib兩個(gè)項(xiàng)目在編譯時(shí)無(wú)法打入版本號(hào),所以對(duì)源代碼repack.c和pg_repack.c文件進(jìn)行了修改蝉仇,修改之后如下
bin項(xiàng)目為例旋讹,點(diǎn)擊鼠標(biāo)右鍵,選擇配置屬性->C/C++->命令行轿衔,在其它選項(xiàng)框中填入/D "WIN_BUILD"沉迹,如下圖:
lib項(xiàng)目需要做同樣的配置
2.8編譯項(xiàng)目
分別選中bin和lib兩個(gè)項(xiàng)目(不分先后),鼠標(biāo)右鍵選擇生成害驹。
生成的文件在pg_repack-1.4.6\msvc\x64\Release相對(duì)路徑下鞭呕,有pg_repack.dll和pg_repack.exe兩個(gè)文件
三、插件文件匯總
注:已經(jīng)做完編譯和修改的文件在壓縮包中可以看到
3.1 pg_repack二進(jìn)制文件
上邊編譯好的pg_repack.dll和pg_repack.exe兩個(gè)文件
3.2 pg_repack擴(kuò)展安裝輔助文件
在pg_repack-1.4.6\lib相對(duì)路徑下有pg_repack.sql.in和pg_repack.control.in兩個(gè)文件宛官,分別拷貝為pg_repack.sql和pg_repack.control
打開(kāi)pg_repack.sql文件葫松,將REPACK_VERSION替換為版本號(hào)1.4.6
修改之后為
打開(kāi)pg_repack.control文件
將REPACK_VERSION替換為版本號(hào)1.4.6;替換module_pathname的值為實(shí)際的插件安裝DLL文件的路徑(插件安裝在后續(xù)介紹)
修改之后
四底洗、插件安裝
4.1放入插件相關(guān)文件
以下描述使用相對(duì)路徑腋么,均為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ù)庫(kù)并添加插件
1珊擂、登錄到想要使用插件的數(shù)據(jù)庫(kù)(cmd中PostgreSQL\bin\路徑下運(yùn)行,注:使用管理員用戶(hù),否則權(quán)限不夠無(wú)法添加)
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ùn)行扳剿,應(yīng)該輸出pg_repack版本號(hào))
pg_repack --version