2016-02-04 14 views
6

Sto tentando di eseguire test su un'applicazione GIS Django che esegue PostGIS come back-end del database.Testare l'app Django con il backend Postgis

Quando si tenta di eseguire i test, ottengo il seguente errore:

django.db.utils.ProgrammingError: permission denied to create extension "postgis" 
HINT: Must be superuser to create this extension. 

L'errore ha un senso. Solo gli utenti del database admin possono installare estensioni poiché questo privilegio consente l'esecuzione di codice esterno arbitrario. MA poiché il test runner deve ricreare il database ogni volta che vengono eseguiti i test, l'utente del database di Django non può procedere.

Ecco la configurazione del mio database.

DATABASES = { 
    'default': { 
     'ENGINE': 'django.contrib.gis.db.backends.postgis', 
     'NAME': 'my_db', 
     'USER': 'my_user', 
     'PASSWORD': 'my_crazy_secure_password', 
     'HOST': '127.0.0.1', 
     'PORT': '', 
     'TEST_NAME': 'test_my_db', 
    }, 
} 

risposta

9

La mia soluzione a questo era sorprendentemente semplice, una volta che l'ho capito.

Connettersi al database template1 ed eseguire CREATE EXTENSION IF NOT EXISTS postgis;. Il databaseviene copiato quando viene creato un nuovo database, quindi tutti i nuovi database avranno già l'estensione installata.

+0

Ha funzionato come un fascino. Sei re. – bbrame

+2

Esegui: 'sudo -u postgres psql -d template1 -c" CREA ESTENSIONE SE NON ESISTE postgis; "' –