语境

我的Continuos集成过程的一些步骤是:


启动Postgres Docker容器
运行Django测试


运行manage.py test --noinput命令时:


创建一个新的test_xxx数据库(如果存在则删除)
对它进行已有的迁移
运行已建立的测试集


在需要从数据库中获取数据的测试中,配置了一组夹具,这些夹具将自动加载到test_xxx db中。

问题

一些迁移需要Postgres hstore扩展名,实际上我遇到了以下错误:


  django.db.utils.ProgrammingError:类型“ hstore”不存在




如何启用hstore扩展?

在开发环境和其他环境中,它是使用CREATE EXTENSION IF NOT EXISTS hstore;设置的,但是不能手动设置。

可以在hstore创建中定义“迁移零”吗?无论如何,我不喜欢这种方法。

从理论上讲,我已经发现听pre_migrate信号应该是可行的,这将是一个最佳选择,但是在使事情变得更复杂之前,我想寻求一个更简单,更直接的解决方案。

编辑:在这种特殊情况下,我必须使用Django 1.8,可以使用since 1.11定义模板,从该模板创建测试数据库,因此可以使用hstore定义模板并解决问题。

最佳答案

Django更新之前的最终解决方法是:


启动Postgre容器时,添加具有init.sql数据库创建和test_xxx扩展名的hstore文件
启动Django测试时,请使用--noinput而不是使用--keepdb标志,这样就不会重新创建数据库

关于django - CI期间在Django测试数据库中启用PSQL hstore扩展,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57693642/

10-15 20:45