it技術:データベース:postgresql:pg_repack
pg_repack
ビルドできても例外エラー
2021年の質問:Windowsでpg_repackをビルドしても例外エラーになってしまう。
pg_repack binaries under windows
下記サイトは2018年のもので静的なpostgres.libを作成して動作したとの報告があったが、現在は postgres.lib が提供されており、上記サイトでも postgres.lib をリンクしても、例外エラーで動作しないことから問題は別物と考える。
調査
pg_repack のデバッグでは、set_pglocale_pgservice(argv[0], “pgscripts”); を実行すると例外エラーとなる。
vaccumedb のデバッグでは、set_pglocale_pgservice(argv[0], “pgscripts”); を使用していても正常に動作する。違いとしてvaccumedb では、postgres.lib をリンクしていない。
pg_repack以外で exe形式で postgres.lib をリンクしたものは他にない。
関数 | モジュール | ソース元 |
---|---|---|
set_pglocale_pgservice | libpgcommon.lib | |
setlocale(pgwin32_setlocale) | libpgport.lib | |
select(pgwin32_select) | postgres.lib | backend¥port¥win32¥socket.c |
pgwin32_dispatch_queued_signals | postgres.lib | backend¥port¥win32¥signal.c |
errstart | postgres.lib | backend\utils\error\elog.c |
pg_repack を pgwin32_selectで検索しても見つからないが、select で検索すると見つかる。
ret = select(max_fd + 1, &input_mask, NULL, NULL, &timeout);
- win32.port.h
#define setlocale(a,b) pgwin32_setlocale(a,b) #define select(n, r, w, e, timeout) pgwin32_select(n, r, w, e, timeout)
it技術/データベース/postgresql/pg_repack.txt · 最終更新: 2025/07/01 00:44 by yajuadmin