Как протестировать процедуры PostgreSQL Pl/Python с помощью Travis CI?
Я пытаюсь настроить CI для некоторых процедур PostgreSQL PL/Python в Travis CI.
Я пробовал несколько способов:
1) С устаревшей инфраструктурой я попытался просто предположить, что PL/Python уже установлен, но это не удалось:
The command "psql -U postgres -c 'CREATE EXTENSION plpythonu;'" exited with 1.
0.01s$ psql -U postgres -d test -c 'CREATE LANGUAGE plpythonu;'
ERROR: could not access file "$libdir/plpython2": No such file or directory
2) Попробовали добавить команды sudo apt-get update && sudo apt-get -y install postgresql-plpython-9.4
в начале. И он также потерпел неудачу, потому что эта команда инициировала замену PostgresSQL 9.4, которая уже установлена в среде Travis.
сборка Travis.
3) Также попытался использовать инфраструктуру на основе контейнера с этими строками в config:
addons:
postgresql: "9.4"
apt:
packages:
- postgresql-plpython-9.4
Успех тоже.
Каков хороший способ протестировать процедуру PL/Python в Travis CI?
Ответы
Ответ 1
Мне удалось создать python-tempo build со следующими .travis.yml:
sudo: required
language: python
before_install:
- sudo apt-get -qq update
- sudo /etc/init.d/postgresql stop
- sudo apt-get install -y postgresql-9.4
- sudo apt-get install -y postgresql-contrib-9.4 postgresql-plpython-9.4
- sudo -u postgres createdb test
- sudo -u postgres createlang plpython2u test
- sudo pip install jinja2
script:
- >
sudo -u postgres psql -d test -c 'CREATE OR REPLACE FUNCTION py_test()
RETURNS void LANGUAGE plpython2u AS $$
import jinja2
$$;'
- sudo -u postgres psql -d test -c 'SELECT py_test();'
У ваших предыдущих попыток конфигурации были различные проблемы, в том числе не останавливать существующий экземпляр PostgreSQL 9.1 перед установкой 9.4 и не указывать язык plpython должным образом. Я считаю, что некоторые команды также не запускались как правильный пользователь. Все проблемы устраняются вышеуказанной конфигурацией. Могут быть способы, в которых эта конфигурация может быть улучшена, но я остановился, как только я ее заработал.
Контейнерная конфигурация не будет работать, потому что postgresql-plpython-9.4
в настоящее время не находится в белом списке предварительно одобренных пакетов. Тем не менее, postgresql-plpython-9.5
, поэтому, если вы хотите перейти на конфигурацию на основе контейнера, вы можете попробовать после процесса утверждения пакета для postgresql-plpython-9.4
или дождаться выпуск GA PostgreSQL 9.5 и попробуйте выполнить миграцию.
Ответ 2
Преобразование моих предыдущих комментариев в ответ теперь, когда оно было подтверждено...
Как указано в Travis docs, правильный способ установить это - обновить свои зависимости на этапе before_install (как вариант 2 в ваш список).
Единственная проблема заключается в том, что вы не остановили Postgres перед обновлением.
Ответ 3
Я точно не знаю деталей, но если вы поместите файлы в нужное место, вы можете вызвать их из самой процедуры
import fileName.className
или
import methodName from fileName.className
Изменить: я просмотрел его, просто поместил его в тот же каталог, что и работающая программа (cmd, idle, ect.), и вызовите его, или поместите в папку и добавьте имя папки в код
например.
import folder/fileName.ClassName