如何使用Travis CI测试Pl/Python PostgreSQL存储过程?

13

我正在尝试在Travis CI中为一些PL/Python PostgreSQL过程设置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 build.

3) 还尝试使用基于容器的基础设施,并在配置中添加了这些行:

addons:
  postgresql: "9.4"
  apt:
    packages:
      - postgresql-plpython-9.4

也没有成功。

怎样在Travis CI中测试PL/Python过程的好方法是什么?


你认为为什么选项2会失败?Travis 文档明确指出,在安装依赖项时更新软件包是正确的做法... - Peter Brittain
@PeterBrittain 它与现有的PostgreSQL存在冲突。请参见更新,我已经附上了这种构建的日志。 - Gill Bates
1
看起来升级被拒绝了,因为您的旧版本Postgres仍在运行...您尝试过在尝试升级之前停止Postgres吗? - Peter Brittain
3个回答

7
我能够使用以下.travis.yml成功构建Python-tempo
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();'

您的旧配置尝试存在各种问题,包括在安装9.4之前未停止现有的PostgreSQL 9.1实例,并且未正确指定plpython语言。我相信某些命令也没有以正确的用户身份运行。所有问题都通过上述配置得到解决。这种配置可能有改进的方法,但是一旦它开始工作,我就停止了。
基于容器的配置无法工作,因为postgresql-plpython-9.4目前不在预先批准软件包的白名单中。然而,postgresql-plpython-9.5在其中,因此,如果您想迁移到基于容器的配置,可以尝试遵循软件包批准过程来获取postgresql-plpython-9.4或等待PostgreSQL 9.5的GA发布,然后尝试迁移。

如果使用基于容器的基础架构,您将如何在安装“postgresql-plpython-9.4”或“postgresql-plpython-9.5”软件包之前停止PostgreSQL? - Gill Bates
@GillBates,我没有尝试使用基于容器的配置来完成您的设置,因为我发现postgresql-plpython-9.4不是预先批准的软件包。如果它被预先批准并且您使用了选项3中的配置,我想Travis会聪明到知道何时停止和启动PostgreSQL。如果它不够聪明,那么我认为这是Travis的一个错误,而且我不知道如何在这种情况下停止PostgreSQL,因为即使是当前的Travis文档也使用sudo来停止PostgreSQL:http://docs.travis-ci.com/user/database-setup/#PostgreSQL - heenenee

4

现在已确认,将我之前的评论转为答案...

Travis文档所述,正确安装此软件的方法是在before_install阶段更新依赖项(与您列表中的选项2类似)。

唯一的问题似乎是在升级之前未停止Postgres服务。


2

我不知道具体细节,但是如果你将文件放在正确的位置,就可以从程序本身调用它。

import fileName.className

或者

import methodName from fileName.className

编辑:我查了一下,只需将它放在与你运行的程序(cmd、idle等)相同的目录中并调用它,或将其放在文件夹中并将文件夹名称添加到代码中即可。
例如:
import folder/fileName.ClassName

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接