我在我的django应用程序中使用postgres,并在数据库中手动创建了 hstore扩展。但是,当我运行测试时,它会尝试创建一个新数据库,并在找不到hstore扩展时失败。
我收到以下错误:
django.db.utils.ProgrammingError: hstore type not found in the database. please install it from your 'contrib/hstore.sql' file
我已根据此post更新了我的迁移,结果如下:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
from django.conf import settings
from django.contrib.postgres.operations import HStoreExtension
import django.contrib.postgres.fields
import django.contrib.postgres.fields.hstore
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
HStoreExtension(),
migrations.CreateModel(
name='AppUser',
fields=[
('id', models.AutoField(serialize=False, verbose_name='ID', primary_key=True, auto_created=True)),
('created_date', models.DateTimeField(auto_now_add=True)),
('modified_date', models.DateTimeField(auto_now=True)),
('lock', models.BooleanField(default=False)),
('username', models.CharField(max_length=100)),
('email', models.EmailField(max_length=150)),
('social_data', django.contrib.postgres.fields.hstore.HStoreField(blank=True, default='')),
('phone_number', models.CharField(max_length=15)),
('photo', models.URLField(blank=True)),
('gender', models.TextField(max_length=6)),
('badges', django.contrib.postgres.fields.ArrayField(size=None, base_field=models.CharField(max_length=30))),
],
options={
'abstract': False,
},
),
]
答案 0 :(得分:6)
如documentation中所述:
使用时不会自动安装hstore扩展名 包:您必须手动安装。
为此,您必须连接到数据库并创建扩展名:
CREATE EXTENSION hstore;
要运行测试,必须在template1上安装hstore扩展 数据库。在template1上安装hstore:
$ psql -d template1 -c 'create extension hstore;'
对我而言,它就像一个魅力! :)
检查扩展是否正常工作:使用通信用户连接到所需的数据库,然后发出:
`CREATE table test(id serial,value hstore);'
如果一切正常,你应该得到:CREATE TABLE
回复。
答案 1 :(得分:1)
以下步骤可帮助您创建hstore
扩展名。
$ sudo su - postgres
$ psql
$ \ c data_base_name
$ CREATE EXTENSION hstore;
它为我工作。