Как протестировать процедуры 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