PostgreSQL не реплицирует некоторые изменения (расширения) - PullRequest
0 голосов
/ 29 октября 2019

Я воспроизводлю следующий этот документ репликация "главный-подчиненный" с серверами БД PostgreSQL. Перед кластером находится экземпляр pgpool в качестве балансировщика нагрузки. Все идет нормально.

Проблема заключается в том, что я запрашиваю базу данных из приложения и использую определенные функции из базы данных, которые используют некоторые расширения, такие как pg_trgm или pg_prewarm, в качестве примера. Каждый раз, когда запрос уравновешивается одному из ведомых, я получаю исключение, сообщающее, что отсутствует расширение, которое я пытаюсь использовать.

Could not access file $libdir/pg_trgm

Когда я проверяю список расширений с \dx на каждомбаза данных на главном компьютере Я получаю полный список, но на ведомых устройствах это просто pop plpgsql.

Поскольку ведомые устройства являются серверами только для чтения, я не могу создавать расширения там.

Есть ли способ, которым яможет реплицировать создание расширений на подчиненные серверы?

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 29 октября 2019

Вы забыли установить пакет «contrib» PostgreSQL на резервный компьютер. Как следствие, расширения не могут быть созданы.

1 голос
/ 29 октября 2019

Подчиненные серверы думают, что расширение установлено (потому что ссылки на него были скопированы на него вместе с остальными каталогами мастера), но когда идет загрузка мяса и картошки расширения, на самом деле это не так. там.

Вам необходимо установить двоичные объекты, которые составляют расширения, на серверы реплик. То, как вы это сделаете, зависит от того, как вы установили программное обеспечение на этих серверах для запуска.

Когда я проверяю список расширений с помощью \ dx для каждой базы данных на главном компьютере, я получаю полный список, но на ведомых егопросто поп plpgsql.

Это не возможно на основе вашего описания. Если реплика является копией мастера, созданного pg_basebackup, то \ dx должен возвращать одинаковые результаты как для мастера, так и для реплики. \ dx просто проверяет системный каталог, чтобы увидеть, что он считает установленным. Если базовые двоичные файлы отсутствуют, это не волнует, в любом случае, оно сообщает об этом. Если вы получаете другие результаты, значит, вы не связаны с тем экземпляром, который вам кажется.

...