superuser - crear superusuario django
no se puede crear una extensión sin un rol de superusuario (3)
Estoy intentando ejecutar pruebas unitarias en Django y crea una nueva base de datos. La base de datos tiene extensiones postgis y cuando creo regularmente la base de datos, uso "CREAR EXTENSIÓN postgis".
Sin embargo, cuando ejecuto pruebas, me da el siguiente error:
$ ./manage.py test
Creating test database for alias ''default''...
Got an error creating the test database: database "test_project" already exists
Type ''yes'' if you would like to try deleting the test database ''test_project'', or ''no'' to cancel: yes
Destroying old test database ''default''...
DatabaseError: permission denied to create extension "postgis"
HINT: Must be superuser to create this extension.
El usuario ya tiene el privilegio Crear BD, estoy usando PostgreSQL 9.1 en Ubuntu 12.04 con Postgis 2.0.
La forma más fácil que encontré es:
su postgres
psql
alter role user_name superuser;
#then create the extension as the user in a different screen
alter role user_name nosuperuser;
Básicamente, otorgue poderes de superusuario al usuario durante un breve periodo de tiempo y cree la extensión. Luego revoque los poderes del superusuario.
También puede usar /connect user_name
para convertirse en ese usuario y crear la extensión directamente desde el usuario de postgres
.
Otra forma de resolver esto que se sugiere en los documentos de django
$ psql <db name>
> CREATE EXTENSION postgis;
puede iniciar sesión en una base de datos como superusuario y crear la extensión una vez. La extensión estará disponible para el usuario db de tu api. Cuando django se ejecuta CREATE EXTENSION IF NOT EXISTS postgis
postgres no lanzará.
Si está viendo errores al migrar la verificación doble, creó la extensión en la base de datos correcta, una sesión de muestra
$ psql
=> /l - list databases
=> /c <db name> - connect to django db
=> create extension postgis;
puede verificar que la extensión está instalada si ve la tabla spatial_ref_sys
=> /dt
List of relations
Schema | Name | Type | Owner
--------+----------------------------+-------+----------
public | spatial_ref_sys | table | postgres
para las pruebas, recomiendo ejecutarlas en una base de datos de desarrollo local y otorgar al usuario capacidades de superusuario como > ALTER ROLE <user_name> SUPERUSER;
En el peor de los casos puedes crear un nuevo superusuario:
$ createuser --superuser <user_name>
o alterar el rol de un usuario existente:
postgres# ALTER ROLE <user_name> SUPERUSER;