with mac error django postgresql

django - mac - error loading psycopg2 module: no module named ''psycopg2''



Conexión de Django a PostgreSQL: "Error de autenticación entre pares" (5)

OperationalError at /admin/ FATAL: Peer authentication failed for user "myuser"

Este es el error que recibo cuando trato de llegar a mi sitio de administración de Django. He estado usando la base de datos MySQL sin problema. Soy nuevo en PostgreSQL, pero decidí cambiar porque el host que finalmente planeo usar para este proyecto no tiene MySQL.

Por lo tanto, pensé que podría pasar por el proceso de instalación de PostgreSQL, ejecutar un syncdb y estar listo.

El problema es que parece que no puedo obtener mi aplicación para conectarse a la base de datos. Puedo iniciar sesión en PostgreSQL a través de la línea de comandos o la aplicación de escritorio que descargué. Simplemente no en el guion.

Además, puedo usar el manage.py shell para acceder al db sin problemas.

¿Alguna idea?


Acabo de tropezar con el mismo problema pero quería usar unix sockets como dijo clime, pero al seguir usando el método peer . Mapeé mi nombre de usuario del sistema con el nombre de usuario postgres dentro del pg_hba.conf , que está trabajando con el método de peer .

Dentro de pg_hba.conf agregué:

local all all peer map=map-name

Dentro de pg_ident.conf agregué:

map-name mysystem-username mypostgres-username


Eché un vistazo a la excepción, noté que tenía que ver con mi configuración de conexión. Volví a settings.py y vi que no tenía una configuración de host. Agrega localhost y voila.

Mi settings.py no tenía una base de datos HOST para MySQL, pero necesitaba agregar una para que PostgreSQL funcionara.

En mi caso, agregué localhost a la configuración HOST y funcionó.

Aquí está la sección de DATABASES de mi settings.py .

DATABASES = { ''default'': { ''ENGINE'': ''django.db.backends.postgresql_psycopg2'', ''NAME'': ''<MYDATABASE>'', ''USER'': ''<MYUSER>'', ''PASSWORD'': ''<MYPASSWORD>'', ''HOST'': ''localhost'', # the missing piece of the puzzle ''PORT'': '''', # optional, I don''t need this since I''m using the standard port } }


Lo arreglé editando la parte inferior de /etc/postgres/9.1/main/pg_hba.conf para que sea (cambiando md5 a trust; NOTE esto significa que no habrá una contraseña de la base de datos, que puede no ser lo que quieres)

# TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 trust


Mejor que confiar plenamente es simplemente configurarlo en md5.

# "local" is for Unix domain socket connections only local all all md5


Probablemente se deba a que su script se está ejecutando bajo otro usuario distinto al que está intentando conectar ( myuser aquí). En este caso, la autenticación de pares fallará. Su solución con HOST: "localhost" funciona porque ya no está utilizando la autenticación de pares. Sin embargo, es más lento que HOST: "" porque en lugar de usar sockets unix, usa conexiones TCP. De django docs :

Si está utilizando PostgreSQL, de forma predeterminada (HOST vacío), la conexión a la base de datos se realiza a través de sockets de dominio UNIX (líneas ''locales'' en pg_hba.conf). Si desea conectarse a través de sockets TCP, configure HOST en ''localhost'' o ''127.0.0.1'' (''host'' en pg_hba.conf). En Windows, siempre debe definir HOST, ya que los sockets de dominio UNIX no están disponibles.

Si desea seguir usando sockets, se necesitan las configuraciones correctas en pg_hba.conf . El más simple es:

local all all trust

al comentar todas las demás líneas local en la configuración. Tenga en cuenta que es necesario volver a cargar postgres para que este cambio surta efecto.

Pero si está en duda la máquina de producción multiusuario, es posible que desee usar algo más seguro como md5 (consulte la explicación de varios métodos de autenticación).