Установка pg_partman на postgresql12
Базово, мы имеем не проработаные детские травмы, многолетний страх обновить постгрю, смелость и решимость сидеть на старых и не поддерживаемых пакетах.
Так же, это дает нам возможность погрузиться в мир не существующих репозиториев и компиляции из исходников!
Установка pg_partman
Мы имеем замечательный сервер на Amazon Linux 2.
Я не часто занимаюсь девопсерскими задачами, но на мой скромный взгляд, у Amazon Linux несколько странный подход к обновлению. Они словно живут на Гавайях в вечной свежести морского бриза, но мы живем в городах с плотной застройкой и иногда испытываем сложности со своевременной реновацией и ремонтом инфраструктуры.
Пожалуйста, старайтесь обновлятся своевременно, последний калека переполз на postgresql13, вышла стабильная 14 - запустите процесс! За два года можно обновится, но я не настаиваю, при обновлении все сломаете, потом будете жене рассказывать какой я плохой писатель.
Десятилетиями сидят сеньоры на старье и ничего. Потом их увозит катафалк, а разгребать всё нам, людям с активной жизненной позицией. Я не вижу ни каких причин нести крест типа: установил v12, на ней и умру. Придет время, придётся обновлять всё + все зависимости. Здесь один плюс: скорей всего решать проблему будет кто-то другой, а может и нет (ахаха).
В моем распоряжении Postgresql 12, первое что нужно сделать, это найти версию partman, которая будет работать с нашей постгрей. Для 12 версии, это pg_partman:^4, последняя из которых v4.7.4
Снова вода: я сторонник подхода "а вдруг уже все установлено?". Поэтому, я не ставлю предварительно нужные пакеты для установки/компиляции. На не обновляемых системах, может обновится, какая-нибудь зависимость и перестанет работать, ну допустим, логин в систему.
git clone https://github.com/pgpartman/pg_partman.git
cd pg_partmangit
checkout tags/v4.7.4
Хотя, я знаю, что у меня ничего не установлено, но давайте, через psql зайдем, да проверим.
psql -U postgres -d dbname
dbname> SELECT extversion FROM pg_extension WHERE extname = 'pg_partman';
extversion
------------
(0 rows)
А может уже все установлено, для добавления этого расширения? Там же в psql, не отходя от кассы, добавим его.
CREATE EXTENSION pg_partman;
ERROR: could not open extension control file "/usr/share/pgsql/extension/pg_partman.control": No such file or directory
Вот кстати путь, где можно проверить есть ли расширения без psql
ll /usr/share/pgsql/extension/pg_partman.control
Хорошо! Мы в директории pg_partman, выше был сколнирован репозиторий и выполнен переход в его директорию. Теперь, начнем компиляцию партмана. Ух... Не, по факту, статья может и короткая получится, но я чуть не сдох.
make
/bin/sh: pg_config: command not found
/bin/sh: pg_config: command not found
make: pg_config: Command not found
Вот тут дядька делится опытом, почти точь в точь с чем я столкнулся, только он взял этот файлик из другой системы и копирнул его в /usr/bin. У меня такого варианта не было, можете попробовать сократить путь. Хотя кого я обманываю? Был у меня такой файлик с CentOS, но как сами понимаете, это другая ось - не прокатило. Кстати, если попробуете его скопировать и не сработает, лучше удалите его сразу, мы будем ставить его в рамках других либ, вдруг он не затрется.
Ставим devel пакеты где необходимо.
sudo yum install postgresql12-devel
Error: Package: postgresql12-devel-12.18-1PGDG.rhel7.x86_64 (pgdg12)
Requires: llvm-toolset-7-clang >= 4.0.1
Я думал меня похоронят, с этой надписью. Решение я нашел здесь. Коммент который реально выручил, кто-то дизлайкнул. Всегда такому удивляюсь.
sudo yum -y install https://mirror.centos.org/centos/7/extras/x86_64/Packages/centos-release-scl-rh-2-3.el7.centos.noarch.rpm
Я не всё ставил из коммента. За время разборок, я понял, что нужен centos-release-scl, rh или нет мне все равно. В случае, если llvm-toolset-7-clang у вас дальше не встанет, то поставьте всё, что советует тот добрый человек.
sudo yum install postgresql-devel
Так, мы поставили этот замечательный пакет, но он не принес в нашу семью pg_config! Команда make всё еще не отрабатывает.
sudo yum install postgresql-server-devel
Поставим, еще одну либу. Я кстати не нашел, с каким из этих аистов прилетает pg_config, но я нашел его после установки postgresql-server-devel. Хотя, здесь я точно не помню, возможно, этот жук прилетел с установкой postgresql-server. Бинарник назывался pg_server_config, а я искал pg_config, вот и не сразу увидел. Почти полностью потеряв веру, я решил просто переименовать pg_server_config в pg_config.
sudo cp /usr/bin/pg_server_config /usr/bin/pg_config
Кстати, если бы веру почти полностью не потерял, мог бы указать путь через переменную PG_CONFIG
make PG_CONFIG=/usr/bin/pg_server_config
sudo make install PG_CONFIG=/usr/bin/pg_server_config
Далее я снова выполнил make и в знак благодарности мне прилетела другая ошибка.
make: /usr/bin/clang: Command not found
make: *** [src/pg_partman_bgw.bc] Error 127
Я решил, что в этот раз мне повезет и просто поставил clang.
sudo yum install -y clang-devel
Снова выполняю make и он отрабатывает, радуя меня парой сотен символов, говорящих о том, что он готов к install!
sudo make install
/bin/sh: /usr/bin/llvm-lto: No such file or directory
sudo yum install llvm-devel
Итак, я цепляюсь к базе через psql.
CREATE EXTENSION pg_partman;
CREATE EXTENSION
dbname=# SELECT extversion FROM pg_extension WHERE extname = 'pg_partman';
extversion
------------
4.7.4
(1 row)
Вот и всё!
С очередной победой! Возможно потребуется пользователю из под которого будет юзаться партман, выдать права на функции и таблицы партмана.