Estoy tratando de ejecutar las pruebas unitarias en Django, y se crea una nueva base de datos. La base de datos postgis extensiones y cuando me regularmente para crear la base de datos, yo uso «CREAR la Extensión postgis».

Sin embargo, al ejecutar las 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 tiene el Crear DB privilegio ya, estoy usando PostgreSQL 9.1 en Ubuntu 12.04 con Postgis 2.0.

InformationsquelleAutor Rudolf Olah | 2013-05-13

3 Comentarios

  1. 90

    El Django documentación sobre postgis tiene alguna información sobre la configuración de los privilegios de usuario.

    En el peor de los casos puede crear un nuevo superusuario:

    $ createuser --superuser <user_name>

    o modificar un usuario existente papel:

    postgres# ALTER ROLE <user_name> SUPERUSER;
    • Gracias por salvar mi tiempo 🙂
    • Está aplicación no se ejecuta como superusuario. Me ha proporcionado una solución a esta pregunta.
    • Escribí esta respuesta hace años cuando trabajaba en una agencia donde la base de datos vivido en el mismo servidor que la aplicación web y sería derribado al final de una campaña de marketing y tocado ningún otro usuario de datos. Estoy de acuerdo en general, todos los demás proyectos en los que he trabajado en tener los permisos adecuados para que los usuarios (pero si usted está poniendo a prueba a nivel local, ¿por qué no ir con un superusuario :P)
    • totalmente comprensible, yo era sólo la presentación de la respuesta me gustaría que si yo tenía menos experiencia. Esperemos que los demás se beneficien de nosotros.
  2. 39

    Forma más fácil que he encontrado 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, dar al usuario superuser poderes por un tiempo corto, y crear la extensión. A continuación, revocar los poderes de superusuario.

    También puede utilizar \connect user_name para llegar a ese usuario y crear la extensión directamente desde el postgres usuario.

    • Eso tiene sentido, no tiene sentido mantener al usuario con privilegios de superusuario, reduce la superficie de ataque. Me gusta!
  3. 11

    Otra forma de resolver esto que se sugiere en el django docs

    $ psql <db name>
    > CREATE EXTENSION postgis;

    puede iniciar sesión en una base de datos como la de superusuario y crear la extensión de una vez. La extensión pasará a estar disponible para su api db usuario. Cuando django ejecuta CREATE EXTENSION IF NOT EXISTS postgis postgres no va a tirar.

    Si usted está viendo errores de migración de comprobar de nuevo que creó la extensión en la base de datos correcta, una muestra sesssion

    $ psql
    => \l            - list databases
    => \c <db name>  - connect to django db
    => create extension postgis;

    puede comprobar la extensión está instalada si ves la tabla spatial_ref_sys

    => \dt
                       List of relations
     Schema |            Name            | Type  |  Owner
    --------+----------------------------+-------+----------
     public | spatial_ref_sys            | table | postgres

    para pruebas recomiendo correr contra un local dev base de datos y el otorgamiento al usuario de superusuario habilidades como > ALTER ROLE <user_name> SUPERUSER;

Dejar respuesta

Please enter your comment!
Please enter your name here