постгрес и питон

В postgres 9.2 я пытаюсь создать программу на Python, которая может быть триггером. Я хочу запустить внешнюю программу (exe-файл на локальном диске), поэтому для ее запуска я использую python. Когда я пытаюсь создать простую программу, подобную этой:

CREATE FUNCTION one ()
RETURNS int
AS $$
# PL/Python function body
$$ LANGUAGE plpythonu;

Я получаю сообщение об ошибке:

ERROR:  language "plpythonu" does not exist
HINT:  Use CREATE LANGUAGE to load the language into the database.

Когда я бегу:

CREATE LANGUAGE plpythonu

Я получаю сообщение об ошибке:

ERROR:  could not access file "$libdir/plpython2": No such file or directory

Я использую Windows 7 и Python 2.5.

Я искал во многих местах, но не могу найти решение.

Есть идеи?


person Jim    schedule 31.12.2012    source источник
comment
underdark.wordpress.com/2010/12 /10/ пробовали это? Вроде работает с версией 8.4   -  person XORcist    schedule 01.01.2013
comment
Когда я попытался создать первый язык, я получил эту ошибку: ОШИБКА: функция plpython_call_handler() не существует   -  person Jim    schedule 01.01.2013
comment
Кстати, я использовал новый python 3.3, который я установил.   -  person Jim    schedule 02.01.2013
comment
Я написал лучшее объяснение этого здесь: stackoverflow.com/a/24218449/398670   -  person Craig Ringer    schedule 14.06.2014


Ответы (5)


Чтобы решить эту проблему для plpython3, необходимо было:

  • Установите Python 3.2
  • Выполнить CREATE LANGUAGE plpython3u

Обновление: здесь я написал гораздо лучшее объяснение: https://stackoverflow.com/a/24218449/398670

person Craig Ringer    schedule 11.01.2013

Я только что решил эту проблему, буквально несколько дней назад. Решение довольно сложное. Вот оно.

  1. Установите версию python 3.2.* только в вашей системе.
  2. В Postgresql используйте команду CREATE LANGUAGE plpython3u, чтобы установить поддержку языка Python 3. Чаще всего это выдает следующую ошибку «невозможно загрузить «.....\plpython3.dll» ошибка 126. (Обратите внимание, что если он установлен правильно, ошибка не будет отображаться.)

  3. Если вы получили указанную выше ошибку, перейдите в каталог установки Python (по умолчанию C:\python32) и найдите «python3.dll» в папке DLL. Скопируйте этот файл в папку «lib» Postgresql в каталоге установки Postgres (по умолчанию это c:\program files\postgres\9.x\lib\"). Переименуйте этот скопированный файл в python32.dll.

  4. Теперь снова запустите команду CREATE LANGUAGE plpython3u. На этот раз должно сработать.

Чтобы проверить, проверьте представление pg_available_extensions в системных таблицах postgresql. Строка, содержащая plpython3u, должна иметь номер версии в столбце «установленная версия».

Примечание. Это работает только для языка plpython3u. Я не знаю подобного процесса для plpython2u.

person Raghavendra Kumar    schedule 04.02.2013
comment
Да, это сработало и для меня. Правильная версия имеет решающее значение. - person user1062589; 26.02.2015
comment
Для Postgresql 9.6, использующего Python 3.3, необходимо установить python 3.3 с сайта www.python.org. Для Windows убедитесь, что путь python33 добавлен в переменную среды PATH. Прочтите следующую запись jlujan для более подробной информации. Я использовал Dependency Walker, чтобы выяснить детали. - person marcopolo; 29.05.2017

Postgres использует дистрибутивы Python ActiveState. Скорее всего, ваша 2.5 слишком устарела и Postgres не может загрузить plpython dll или не установил ее, потому что не было подходящего python. Я думаю, что последние postgres созданы для Python3, а не для 2.x. Вы можете посмотреть в каталоге postgres lib файл plpython3.dll, чтобы узнать, что вам нужно.

person jlujan    schedule 31.12.2012
comment
Я удалил 2.5 и установил 3.3, и я получаю те же ошибки. Я не вижу никаких файлов plpython в этом каталоге. Каталог C:\Program Files (x86)\PostgreSQL\9.2\bin - person Jim; 01.01.2013
comment
Извините, это был неправильный каталог. Я нашел в каталоге lib этот файл: plpython3.dll - person Jim; 01.01.2013
comment
Windows выдает ошибку типа plpython.dll: No such file or directory, когда не может загрузить зависимость от plpython.dll. Эта ошибка сбивает с толку, но мы мало что можем с этим поделать. Я предлагаю открыть plpython.dll с помощью Dependency Walker с dependencywalker.com и убедиться, что правильная DLL Python действительно найдена. Если это не так, вам может потребоваться добавить правильную версию Python в системный PATH. - person Craig Ringer; 02.01.2013
comment
Это было полезно! Я получил несколько ошибок, когда пытался использовать файл plpython3.dll. Он сказал, что не может найти следующие файлы: LIBINTL.DLL, POSTGRES.EXE, PYTHON32.DLL. Я не знаю, как это исправить. Могу ли я получить новую plpython3.dll? Должен ли я переустанавливать все ppostgres? Если я это сделаю, я потеряю базы данных? В прошлом, когда я закрывал postgres, я просто нажимал кнопку закрытия Windows... Как вы думаете, это вызвало проблему? Спасибо, @Крейг! - person Jim; 02.01.2013
comment
libintl.dll и postgres.exe находятся в каталоге PostgreSQL bin, поэтому они будут найдены, когда PostgreSQL загрузит модуль. Каталог, содержащий PYTHON32.DLL, должен находиться в каталоге PATH. См. stackoverflow.com/a/6318188/398670. Это означает, что у вас должен быть Python 3.2, а не 3.1, не 3.3,... - person Craig Ringer; 02.01.2013
comment
@Craig, я удалил Python 3.3 и установил 3.2.3. Я указал путь к python3.dll в пути (C:\Python32\DLLs). Я также нашел PYTHON32.DLL в папке C:\Windows\SysWOW64 и добавил ее в путь. Ничего из этого не сработало... Когда я запускаю create language plpythonu, я все равно получаю сообщение об ошибке: ОШИБКА: не удалось получить доступ к файлу $libdir/plpython2: Нет такого файла или каталога ********** Ошибка **** ****** ОШИБКА: не удалось получить доступ к файлу $libdir/plpython2: нет такого файла или каталога Состояние SQL: 58P01 - person Jim; 06.01.2013
comment
Не добавляйте SysWOW64 в PATH. DLL должна быть в каталоге установки Python, и это то, что вы должны добавить. - person Craig Ringer; 07.01.2013
comment
Я должен был сказать, что добавил python3.dll к пути, А ЗАТЕМ ПОПРОБОВАЛ СОЗДАТЬ И ПОЛУЧИЛ ОШИБКУ, ПОЭТОМУ я добавил второй путь, а затем снова получил ошибку.... - person Jim; 07.01.2013
comment
@Craig, просто будьте ясны: я добавил C:\Python32 в путь, перезапустил сервер postgres и все равно получил следующую ошибку, когда пытался выполнить CREATE LANGUAGE plpythonu. Ошибка: ОШИБКА: не удалось получить доступ к файлу $libdir/plpython2: Нет такого файла или каталога ********** Ошибка ********** ОШИБКА: не удалось получить доступ к файлу $libdir/ plpython2: нет такого файла или каталога Состояние SQL: 58P01 - person Jim; 07.01.2013
comment
@Jim CREATE LANGUAGE plpython3u для Python3 или установите требуемую версию Python2. - person Craig Ringer; 08.01.2013
comment
@Крейг, спасибо!! Эта команда позволила мне запустить программу на Python. Python, который я пытаюсь запустить, должен запускать программу на диске C: моей машины. У меня есть пустой BAT-файл. Когда я пытаюсь запустить его, я получаю сообщение об ошибке. Это всегда одна и та же ошибка. ОШИБКА: WindowsError: [Ошибка 5] Отказано в доступе. Я попытался использовать subprocess.call, а затем попробовал os.startfile. Я думаю, что поскольку BAT-файл пустой, с ним не должно быть проблем. В качестве небольшого теста я записал файл на диск C, и это сработало. Если я могу писать в файл, я должен быть в состоянии запустить файл, верно? Есть идеи? - person Jim; 11.01.2013
comment
@Craig, через несколько минут после того, как я отправил это, я решил, что мне нужны дополнительные двойные кавычки вокруг команды. У меня больше нет этой ошибки, но программа, которую я пытаюсь запустить, не запускается. Это программа для Windows, и я ожидаю, что приложение появится. Я использую os.system. Есть идеи? Спасибо. - person Jim; 11.01.2013
comment
@Jim Опубликуйте новый вопрос для новой проблемы. Ссылка на него здесь, если хотите. Пожалуйста, найдите время, чтобы сделать его подробным и исчерпывающим - покажите код, версии, вывод ошибок и т. д. - person Craig Ringer; 11.01.2013
comment
Как только вы заставите CREATE EXTENSION plpython3u работать нормально, не забудьте изменить последнюю строку функции pyhon с $$ LANGUAGE plpythonu на $$ LANGUAGE plpython3u. - person marcopolo; 29.05.2017

Я установил python 3.2 (x64) и postgres 9.3 (x64)

Выполните этот код CREATE EXTENSION plpython3u

Не забудьте проверить "installation-note.html" вашей версии postgresSQL, там есть конкретная версия python для вашего postgresSQL.

person user3700545    schedule 02.06.2014

извините за майнинг, но для всех тех, кто ищет потерянный пакет (в моем случае на Ubuntu 18.04):

sudo apt-get install -y postgresql-plpython3-10

а потом:

create extension plpython3u;

person Krzysztof Mochocki    schedule 26.02.2021