
pg_rewind
回復後に の古いプライマリ降格をスタンバイに実行しようとしたときに、このエラー通知が表示されましたrepmgr
。(古いスタンバイ @192.168.1.2 はすでに を実行していますrepmgr standby promote
)
postgres
version=15.4 repmgr
version=5.4dev およびこのようなプロセスを実行するコマンドと次のフィードバックは次のとおりです。
repmgr node rejoin --force-rewind -d 'host=192.168.1.2 port=5432 user=rep dbname=repmgr connect_timeout=5'
NOTICE: rejoin target is node "yzx2" (ID: 2)
NOTICE: pg_rewind execution required for this node to attach to rejoin target node 2
DETAIL: rejoin target server's timeline 2 forked off current database system timeline 1 before current recovery point 0/81C6D80
NOTICE: executing pg_rewind
DETAIL: pg_rewind command is "/usr/pgsql-15/bin/pg_rewind -D '/pgdata' --source-server='host=192.168.1.2 port=5432 user=rep dbname=repmgr connect_timeout=5'"
ERROR: pg_rewind execution failed
DETAIL: pg_rewind: error: could not fetch remote file "global/pg_control": ERROR: permission denied for function pg_read_binary_file
実際には、関数 pg_read_binary_file の実行権限をユーザー rep に付与しており、このロールの設定は次のとおりです。
CREATE EXTENSION repmgr;
GRANT pg_checkpoint TO rep;
GRANT pg_read_all_stats TO rep;
GRANT EXECUTE ON function pg_catalog.pg_ls_dir(text, boolean, boolean) TO rep;
GRANT EXECUTE ON function pg_catalog.pg_stat_file(text, boolean) TO rep;
GRANT EXECUTE ON function pg_catalog.pg_read_binary_file(text) TO rep;
GRANT EXECUTE ON function pg_catalog.pg_read_binary_file(text, bigint, bigint, boolean) TO rep;
を使用して再度権限を付与しましたGRANT EXECUTE ON function pg_read_binary_file(text) TO rep;
が、違いはありませんでした。ユーザーにrep
関数を実行する権限がないのではなく、関数に を実行する権限がないというfetch remote file "global/pg_control"
ことです。ちなみに、セキュリティ上の理由から、別のサーバー上の postgres Linux アカウントにアクセスするための ssh 権限は付与しませんでした。