2016-02-04 45 views
6

我试图在运行PostGIS的GIS Django应用程序上运行测试作为数据库后端。使用Postgis后端测试Django应用程序

当我尝试运行测试,我得到以下错误:

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

错误是有道理的。只有管​​理员数据库用户才能安装扩展,因为此权限允许执行任意外部代码。但是由于每次测试运行时测试运行器都需要重新创建数据库,因此Django的数据库用户无法继续。

这是我的数据库配置。

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', 
    }, 
} 

回答

9

一旦我找到答案,我的解决方案就非常简单了。

连接到template1数据库,并运行CREATE EXTENSION IF NOT EXISTS postgis;。在创建新数据库时,将复制template1数据库,因此所有新数据库将已安装扩展。

+0

工作就像一个魅力。你是国王。 – bbrame

+2

运行:'sudo -u postgres psql -d template1 -c“CREATE EXTENSION IF NOT EXISTS postgis;”' –