Ошибка теста Django при миграции postgres hstore

Я использую postgres с моим приложением django, и я вручную создал расширение 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,
        },
    ),
    ]

person Sourabh Dev    schedule 31.03.2016    source источник
comment
это потому, что миграции не запускаются при выполнении тестов   -  person yedpodtrzitko    schedule 31.03.2016
comment
Тогда как мне заставить тестовую базу данных создать расширение hstore?   -  person Sourabh Dev    schedule 31.03.2016
comment
stackoverflow.com/questions/11584749/   -  person yedpodtrzitko    schedule 31.03.2016
comment
Я уже предпринял вышеуказанные шаги по созданию расширения hstore. Это тест, в котором возникает проблема, поскольку создается новая тестовая БД с расширением hstore.   -  person Sourabh Dev    schedule 01.04.2016
comment
Я не понимаю. Ваша проблема в том, цитата: создается новая тестовая БД с расширением hstore? Разве это не тот результат, которого вы хотели достичь?   -  person yedpodtrzitko    schedule 01.04.2016
comment
Ой! Извините, у меня там опечатка... Я имел в виду, что нет.   -  person Sourabh Dev    schedule 01.04.2016
comment
Стараться. Существует ли тестовая база данных? если да, брось это сейчас. Вы изменили шаблон по умолчанию, чтобы он содержал расширение hstore? Если нет, сделайте это сейчас. Теперь создайте базу данных вручную createdb something и проверьте расширения в (\dx). Хстор есть? Хороший. Он также будет в тестовой базе данных.   -  person yedpodtrzitko    schedule 01.04.2016


Ответы (2)


Как указано в документации:

Расширение hstore не устанавливается автоматически при использовании с этим пакетом: его необходимо установить вручную.

Для этого необходимо подключиться к базе данных и создать расширение:

CREATE EXTENSION hstore;

Для запуска тестов расширение hstore должно быть установлено в базе данных template1. Чтобы установить hstore на template1:

$ psql -d template1 -c 'create extension hstore;'

Для меня это сработало как шарм! :)

Проверьте, работает ли расширение: подключитесь к необходимой базе данных с соответствующим пользователем и выполните:

`СОЗДАТЬ тестовую таблицу (серийный номер, значение hstore);'

Вы должны получить: CREATE TABLE ответ, если все в порядке.

person M.Void    schedule 04.07.2016

Следующие шаги помогут вам создать расширение hstore.

$ sudo su — постгрес

$ psql

$ \c имя_базы_данных

$ СОЗДАТЬ РАСШИРЕНИЕ hstore;

Это сработало для меня.

person Muneer Muhammed    schedule 31.03.2017