На днях сменил ноутбук. Установил туда Ubuntu 23.04, браузер поставил. Кой-какие утилиты поставил. PostgreSQL 16 поставил. Вроде всё заработало, ничего не отваливалось.
Через некоторое время решил продолжить изучение прикладного программирования под PostgreSQL – хотел написать функцию на Си и добавить её в psql’e.
Стал собирать решение – посыпались ошибки. Логично, не хватало каких-то библиотек. Я редко ноутбуки меняю, когда-то нужные библиотеки ставил, но напрочь забыл какие именно. Пришлось вспоминать. Так что запишу чтобы в следующий раз мучительно вспоминать не пришлось. Возможно, буду дополнять эту статью:
Библиотеки-утилиты, приведённые ниже, нужны для установки PostgreSQL из исходных кодов. В статье по этой ссылке я показал, какие ошибки могут возникать если будут отсутствовать эти библиотеки-утилиты:
sudo apt install git sudo apt install build-essential sudo apt install libreadline-dev sudo apt install zlib1g-dev sudo apt install flex sudo apt install bison
В этот раз при выполнении ./configure у меня возникла вот такая ошибка:
checking whether to build with ICU support... yes checking for icu-uc icu-i18n... no configure: error: ICU library not found If you have ICU already installed, see config.log for details on the failure. It is possible the compiler isn't looking in the proper directory. Use --without-icu to disable ICU support.
Так что нужно установить дополнительно вот эти библиотеки:
sudo apt install postgresql-16-icu-ext sudo apt install pkg-config sudo apt install libicu-dev
Далее я попробовал запустить сборку моего расширения, в котором создаю функции на языке Си – и опять получил ошибку:
hello_world.c:1:10: fatal error: postgres.h: No such file or directory 1 | #include "postgres.h" | ^~~~~~~~~~~~ compilation terminated. make: *** [<builtin>: hello_world.o] Error 1
Нужно установить файлы для разработки серверных расширений с использованием инфраструктуры PGXS:
sudo apt install postgresql-server-dev-16
Наконец-то, после всех этих действий я успешно смог собрать PostgreSQL master-ветку, собрал расширение, добавил его в базу и смог использовать написанные сишные функции.
Еще обратите внимание на версию gcc и те ключи, которые используются при сборке расширения — они могут отличаться на разных дистрибутивах, поэтому вы можете получить ошибки в некоторых случаях при компиляции одного и того же кода.
sudo apt install git sudo apt install build-essential sudo apt install libreadline-dev sudo apt install zlib1g-dev sudo apt install flex sudo apt install bison sudo apt install postgresql-16-icu-ext sudo apt install pkg-config sudo apt install libicu-dev sudo apt install postgresql-server-dev-16
Leave a Reply