Установка pg_partman на postgreql12

Сложный путь программиста к желаемой цели

Базово, мы имеем не проработаные детские травмы, многолетний страх обновить постгрю, смелость и решимость сидеть на старых и не поддерживаемых пакетах.

Так же, это дает нам возможность погрузиться в мир не существующих репозиториев и компиляции из исходников!

Установка 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.gitcd pg_partmangitcheckout tags/v4.7.4

Хотя, я знаю, что у меня ничего не установлено, но давайте, через psql зайдем, да проверим.

psql -U postgres -d dbnamedbname> 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 foundmake: 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_configsudo make install PG_CONFIG=/usr/bin/pg_server_config

Далее я снова выполнил make и в знак благодарности мне прилетела другая ошибка.

make: /usr/bin/clang: Command not foundmake: *** [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 EXTENSIONdbname=# SELECT extversion FROM pg_extension WHERE extname = 'pg_partman';extversion------------4.7.4(1 row)

Вот и всё!

С очередной победой! Возможно потребуется пользователю из под которого будет юзаться партман, выдать права на функции и таблицы партмана.