语境
我的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/