【问题标题】:Django test fail at postgres hstore migrationDjango 测试在 postgres hstore 迁移时失败
【发布时间】:2016-07-19 06:40:33
【问题描述】:

我在我的 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,
        },
    ),
    ]

【问题讨论】:

  • 这是因为执行测试时没有运行迁移
  • 那么,如何强制测试db创建hstore扩展呢?
  • 我已经采取了上述步骤来创建 hstore 扩展。这是在使用 hstore 扩展创建新的测试数据库时出现问题的测试。
  • 我不明白。您的问题是,引用:“正在使用 hstore 扩展创建新的测试数据库”?不就是你想要达到的结果吗?

标签: django django-models django-testing django-postgresql


【解决方案1】:

正如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 响应。

【讨论】:

    【解决方案2】:

    以下步骤将帮助您创建hstore 扩展。

    $ sudo su - postgres

    $ psql

    $ \c 数据库名称

    $ CREATE EXTENSION hstore;

    它对我有用。

    【讨论】:

      猜你喜欢
      • 2016-01-01
      • 1970-01-01
      • 2023-03-14
      • 2018-07-02
      • 1970-01-01
      • 2020-05-29
      • 2020-04-24
      • 1970-01-01
      相关资源
      最近更新 更多