
Ich bin auf diese Fehlermeldung gestoßen, als ich nach der Wiederherstellung versucht habe, die Herabstufung des alten Primärservers auf den Standby-Server auszuführen pg_rewind
. repmgr
(Der alte Standby-Server @192.168.1.2 wurde bereits ausgeführt repmgr standby promote
.)
postgres
version=15.4 repmgr
version=5.4dev und der Befehl zum Ausführen dieses Prozesses sowie die folgende Rückmeldung lauten:
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
Eigentlich habe ich dem Benutzer-Rep das Ausführungsrecht für die Funktion pg_read_binary_file erteilt, und hier ist die Einrichtung für diese Rolle:
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;
Ich habe das Recht erneut erteilt GRANT EXECUTE ON function pg_read_binary_file(text) TO rep;
, indem ich verwendet habe, und es hat keinen Unterschied gemacht. Es ist nicht so, dass der Benutzer rep
nicht das Recht hat, die Funktion auszuführen, sondern dass die Funktion kein Recht hat fetch remote file "global/pg_control"
, ? Übrigens habe ich aus Sicherheitsgründen kein SSH-Recht erteilt, auf ein Postgres-Linux-Konto auf einem anderen Server zuzugreifen.