|
Модуль plPython3u (переход на новую версию из tgz)
|
|||
---|---|---|---|
#18+
Добрый день всем. Пытался найти информацию в инете, но не удалось. Дано: Сервер Debian 8.6 БД PostgreSql 9.6 Python3 Python 3.4.* Проблема в следующем. Необходимо, чтобы версия питона в расширении была выше 3.6, т.к. необходимо работать с определенными модулями питона. Репозиторий дебиана 8.6 мертв. При установки питона 3.10.1 из tgz он появляется в системе, работает, но в расширении plpython3u как ни крути остается старая версия. Смена линков и переустановка модуля postgresql-plpython3-9.6 результатов не дает. Как я понимаю, постгрес работает с системным питоном, но как это исправить нигде не нашел. Помогите советом пожалуйста, пните в нужном направлении. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2021, 07:42 |
|
Модуль plPython3u (переход на новую версию из tgz)
|
|||
---|---|---|---|
#18+
ronvaleron Репозиторий дебиана 8.6 мертв. https://www.debian.org/distrib/archive + https://apt-archive.postgresql.org/ если база оттуда как линкуется plpython с собственно бинарниками питона - не разбирал. Возможно extenson нужно будет пересобрать руками. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2021, 10:37 |
|
Модуль plPython3u (переход на новую версию из tgz)
|
|||
---|---|---|---|
#18+
Melkij, Насчет репозитория, там вроде нет свежего питона. А вот по линкам это уже вопрос. Этого будет достаточно, что бы постгрес увидел новую версию из tgz? Куда копать всетаки? Пытался посмотреть пакет postgresql-plpython3-9.6, ничего внутри не нашел. После установки тоже ничего путного не увидел, только /usr/share/postgresql/13/extension/plpython3u--1.0.sql. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2021, 12:21 |
|
Модуль plPython3u (переход на новую версию из tgz)
|
|||
---|---|---|---|
#18+
ronvaleron, для начала посмотрите, какая библиотека нужна у меня не дебиан и не 9ый постгрес, но показывает вот так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
В моей инсталляции требуется libpython3.9.so.1.0. Если пробовать заменять, то тогда только этот файл. Более корректный способ действительно пересобрать из исходников, указав в PATH и PYTHON_PATH при сборке местоположение Вашего нового питона. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2021, 08:24 |
|
Модуль plPython3u (переход на новую версию из tgz)
|
|||
---|---|---|---|
#18+
grgdvo, Спасибо за наводку. Проверил на экспериментальном серваке, там системный питон 3.9.2, а сторонний установлен 3.10.1. Да, в либак прописан тот, что из пакета с репозитория. Начал искать информацию, как подменить либы, пока нашел только как скомпилировать либы из исходников *.o. Но не понятно есть ли нуждные исходники в пакете питона из файла tgz с офф сайта и что делать дальше, после сборки библиотек... Проще конечно плюнуть и накатить новый сервак. Но если честно, хочется разобраться в этой механике. root@debian:/lib/x86_64-linux-gnu# ldd /usr/lib/postgresql/13/lib/plpython3.so linux-vdso.so.1 (0x00007ffc67927000) libpython3.9.so.1.0 => /lib/x86_64-linux-gnu/libpython3.9.so.1.0 (0x00007fcf7ef98000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fcf7ef76000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcf7edb1000) libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007fcf7ed82000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fcf7ed65000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fcf7ed5f000) libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007fcf7ed58000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fcf7ec14000) /lib64/ld-linux-x86-64.so.2 (0x00007fcf7f55c000) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2022, 11:04 |
|
Модуль plPython3u (переход на новую версию из tgz)
|
|||
---|---|---|---|
#18+
ronvaleron, Думаю, что шаги должны быть примерно следующими (для всего процесса понадобится предварительно установить компилятор, binutils, gnu make, bison, flex и т.п. что нужно в требованиях для сборки Python и PG): Часть 1. Установка Python 1) качаем архив исходников 3.10.1 (tar.xz файл) 2) Распаковываем исходники 3) Конфигурируем: ./configure --enable-shared --enable-optimizations --prefix=/my-new-python-root-here 4) Собируем: make 5) Ставим в указанную в prefix директорию: make install На этом установка python-3.10.1 окончена. Стоит проверить работоспособность, проверить работу pip и прочего, чтобы в нужное место ставились нужные пакеты. Часть 2. Пересборка PL/Python в PG 1) запускаем pg_config вашей установленной версии PG из вывода находим VERSION и CONFIGURE 2) качаем исходники нужной версии (лучше через git, далее git checkout RELX_Y_Z, можно и архив выкачать и распаковать в какую-либо директорию) 3) далее в распакованной директории запускаем то, что у вас вывел pg_config в CONFIGURE ОБРАТИТЬ внимание на всякие пути к Питону. Их нужно подкорректировать на вашу директорию с python-3.10.1 ./configure ..... здесь из pg_config все параметры, с подкорректированным питоном В выводе configure убедиться, что был найден нужный python именно вашей версии Код: plaintext 1. 2. 3.
4) Далее собираем PG вашей версии make 5) Проверяем директорию сборки pl\python. Должны получить нечто такое Код: plaintext 1. 2. 3. 4.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
А также не забывать использовать переменную LD_LIBRARY_PATH. Скорее всего ее потребуется прописать в запуск сервиса PG. В debian это вероятно можно сделать через изменение service-файла. Часть 3. Подмена plpython3.so 1) Теперь можно пойти и попробовать подменить собранный plpython3.so. Старый файл сохраняем где-то, новый копируем на его место. /usr/lib64/postgresql-13/lib64 # ls -la plpython3.so* -rwxr-xr-x 1 root root 157768 янв 4 15:41 plpython3.so -rwxr-xr-x 1 root root 138312 ноя 13 16:41 plpython3.so.bak 2) Здесь надо перезапустить Ваш установленный в системе PG. 3) Далее коннектимся к любой базе и проверяем, что все подцепилось. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Вроде все на месте после подмены. Далее уже более глубоко проверять: как пакеты импортируются, что там с типами данных при вызове функций, ну и так далее по манулу использования PL/Python. С Новым Годом! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2022, 16:20 |
|
Модуль plPython3u (переход на новую версию из tgz)
|
|||
---|---|---|---|
#18+
ronvaleron grgdvo, Спасибо за наводку. Проверил на экспериментальном серваке, там системный питон 3.9.2, а сторонний установлен 3.10.1. Да, в либак прописан тот, что из пакета с репозитория. Начал искать информацию, как подменить либы, пока нашел только как скомпилировать либы из исходников *.o. Но не понятно есть ли нуждные исходники в пакете питона из файла tgz с офф сайта и что делать дальше, после сборки библиотек... Проще конечно плюнуть и накатить новый сервак. Но если честно, хочется разобраться в этой механике. root@debian:/lib/x86_64-linux-gnu# ldd /usr/lib/postgresql/13/lib/plpython3.so linux-vdso.so.1 (0x00007ffc67927000) libpython3.9.so.1.0 => /lib/x86_64-linux-gnu/libpython3.9.so.1.0 (0x00007fcf7ef98000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fcf7ef76000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcf7edb1000) libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007fcf7ed82000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fcf7ed65000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fcf7ed5f000) libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007fcf7ed58000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fcf7ec14000) /lib64/ld-linux-x86-64.so.2 (0x00007fcf7f55c000) Вы не можете использовать постгресовые либы от одного питона а питон другой версии... так не бывает (точнее так не работает). -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2022, 20:24 |
|
Модуль plPython3u (переход на новую версию из tgz)
|
|||
---|---|---|---|
#18+
grgdvo, Спасибо огромное, всё получилось. Инструкция очень помогла. Интересно, а если я соберу библиотеку plpython3.so на другом компе, но все пути будут соблюдены к стороннему питону, будет ли она работать ну и версии соответственно тоже будут соответствовать? в смысле библиотеки имеют просто ссылки на конкретные файлы с полным путем или там есть что-то еще? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2022, 09:46 |
|
Модуль plPython3u (переход на новую версию из tgz)
|
|||
---|---|---|---|
#18+
ronvaleron, В различных заголовках исполняемых файлов (не слинкованных статически) и разделяемых библиотек есть соответствующие таблицы и атрибуты, где записано какие библиотеки нужны по каким именам (SONAME) и каким путям (RPATH и RUNPATH). Вот здесь об этом расписано (параметр -Wl,-rpath), как примерно это работает. Все эти таблицы может заполнить линкер, если ему дать соответствующие параметры при сборке. Использовать или не использовать rpath - выбор мейнтейнера этой библиотека и ее зависимых библиотек. Например для каких-нибудь "своих" плагинов выгодно вставить библиотеку по полному пути, чтобы сразу было понятно откуда брать этот плагин и находить и загружать его без дополнительных настроек в системном лоадере ld.so. Насколько я знаю PG выбирает относительно универсальный (что ли) способ сборки. Пути не внедряются, оставляя все на откуп настройкам системы. Это вроде как более гибкий подход к формированию большого Linux-дистрибутива (хотя PG поддерживает соответствующий флаг конфигурирования сборки --disable/enable-rpath, который позволяет привязаться к конкретной libdir для последующего поиска библиотек). В linux чуть проще, хотя и присутствует проблема dll-hell/dependecy-hell, в отличие от windows. Поэтому, если хотите собрать на одной машине, а потом использовать на другой - это возможно. Библиотеки можно переносить и будет поддерживаться бинарная совместимость (до определенного момента, конечно), и даже возможно ничего не будет падать. Но, все равно, любая подмена файлов на проде в обход системных - это риск поломать работу системы и сложность последующей установки обновлений. Не знаю, что там у вас за пакеты питоновсикие такие, которые требуют только самый свежий питон, но лучше уже откатиться на ту версию питона, которая нативно поддерживается вашей системой, а все эти эксперименты оставить для девелоперских и тестовых стендов. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2022, 23:09 |
|
Модуль plPython3u (переход на новую версию из tgz)
|
|||
---|---|---|---|
#18+
grgdvo, Согласен, не лучшее решение для прода. И таки да, это больше для тестового сервера, который потом подменим свежим, но в данный момент обновить систему не предлставляется возможным. Еще раз благодарю за подробную информацию.)) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2022, 14:02 |
|
|
start [/forum/topic.php?fid=53&msg=40124539&tid=1993716]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
180ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 301ms |
0 / 0 |