Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django test fail at postgres hstore migration

I am using postgres with my django app and I had manually created the hstore extension in the database. But, when I run tests it tries to create a new database and fails when the hstore extension is not found.

I am getting the following errors:

django.db.utils.ProgrammingError: hstore type not found in the database. please install it from your 'contrib/hstore.sql' file

I have update my migrations as per this post and it's as follows:

# -*- 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,
        },
    ),
    ]
like image 715
Sourabh Dev Avatar asked Mar 31 '16 01:03

Sourabh Dev


2 Answers

As it stated in documentation:

The hstore extension is not automatically installed on use with this package: you must install it manually.

For this you must connect to the database and create an extension:

CREATE EXTENSION hstore;

To run tests, hstore extension must be installed on template1 database. To install hstore on template1:

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

For me it worked like a charm! :)

Check if extension is working: connect to required database with correspondent user, and issue:

`CREATE table test(id serial, value hstore);'

You should get: CREATE TABLE response if everything is ok.

like image 200
M.Void Avatar answered Oct 23 '22 07:10

M.Void


The following steps will help you to create hstore extension.

$ sudo su - postgres

$ psql

$ \c data_base_name

$ CREATE EXTENSION hstore;

It's worked for me.

like image 1
Muneer Muhammed Avatar answered Oct 23 '22 08:10

Muneer Muhammed