Можно ли объявить глобальную переменную для распространения на серверах горячего резервирования? - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь обойти тот факт, что PostgreSQL 9.5 не поддерживает запрос задержки репликации из горячего резервирования (возможно запросить задержку с главного сервера, но я пытаюсь избежать подключения к главному серверу, если это абсолютно не нужно) , Мы используем серверы реплики с горячим резервированием в качестве серверов только для чтения для нашего веб-сервиса, и мы хотим игнорировать сервер, если он слишком сильно задерживается от главного сервера. Для обсуждения давайте предположим, что при доступе к данным через горячий резерв допустима задержка менее 5 секунд.

Можно ли определить на главном сервере переменную, которая будет реплицироваться на подчиненные (реплики горячего резервирования в asyn c режим потоковой передачи)?

В настоящее время у меня есть таблица из одной строки и одного столбца для хранения глобальной метки времени в базе данных, и я проверяю эту метку времени, прежде чем обращаться к другим данным через реплику горячего резервирования. И скрипт обновляет эту метку времени каждую секунду в базе данных master. Тем не менее, я не могу проверить метку времени в транзакции, или я получу откат транзакций, набрав

40001 terminating connection due to conflict with recovery
User query might have needed to see row versions that must be removed.
In a moment you should be able to reconnect to the database and repeat your command.

Есть ли какой-либо прием, который может опубликовать sh некоторые данные с главных серверов на серверы горячего резервирования, к которым можно получить доступ в то время как транзакция активна? Мне не нужна возможность откатить изменения этой переменной, и ей не нужно следить за транзакциями (то есть, все в порядке, что значение этой переменной изменяется, даже когда транзакция в режиме повторяющейся изоляции при чтении активна).

...