2016-03-31 15 views
3

Ich benutze Postgres mit meiner Django App und ich hatte die hstore Erweiterung in der Datenbank manuell erstellt. Wenn ich Tests ausfühle, versucht es jedoch, eine neue Datenbank zu erstellen, und schlägt fehl, wenn die Hstore-Erweiterung nicht gefunden wird.Django Test fehlgeschlagen bei postgres hstore Migration

Ich erhalte die folgenden Fehler:

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

Ich habe meine Migrationen aktualisieren nach dieser post und es ist wie folgt:

# -*- 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

Das liegt daran, dass Migrationen nicht ausgeführt werden, wenn Tests ausgeführt werden – yedpodtrzitko

+0

Wie erzwinge ich dann die Test-DB, um eine Hstore-Erweiterung zu erstellen? –

+0

http://stackoverflow.com/questions/11584749/how-to-create-a-new-database-with-the-hstore-extension-already-installed – yedpodtrzitko

Antwort

4

Wie es in documentation erklärte:

Die hstore-Erweiterung wird nicht automatisch bei Verwendung mit dieserinstalliert-Paket: Sie müssen es manuell installieren.

Dazu Sie mit der Datenbank verbinden muss und eine Erweiterung erstellen:

CREATE EXTENSION hstore; 

Tests auszuführen, hstore Erweiterung muss auf template1 Datenbank installiert werden. So installieren Sie hstore auf template1:

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

Für mich war es wie ein Zauber! :)

Überprüfen Sie, ob Erweiterung funktioniert: eine Verbindung zum gewünschten Datenbank mit entsprechenden Benutzer und Ausgabe:

CREATE Tabellentest (id serial, Wert hstore);‘

Sie sollten erhalten: CREATE TABLE Antwort, wenn alles in Ordnung ist.

0

Die folgenden Schritte helfen Ihnen bei der Erstellung der Erweiterung hstore.

$ sudo su - postgres

$ psql

$ \ c data_base_name

$ EXTENSION hstore CREATE;

Es hat für mich gearbeitet.