Accueil > Informatique > Erreur de connexion à la base de données Postgresql avec Django

Erreur de connexion à la base de données Postgresql avec Django

Lorsque je tente de lancer la synchronisation entre Django et ma base de données PostgreSQL, j’obtiens le message d’erreur suivant :self.connection = Database.connect(**conn_params)
psycopg2.OperationalError: could not connect to server: No such file or directory
Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Contexte :

  • Debian Lenny
  • Django 1.1 installé
  • PostgreSQL 8.3.6, installé à partir des sources

Pourtant PostgreSQL est bien lancé, la base est accessible en utilisant l’utilitaire psql

Eh bien quoi alors ?

Si on y regarde de plus près, il y a bien un fichier .s.PGSQL.5432, mais il est dans /tmp… en faisant:$ mkdir /var/run/postgresql
$ ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/

cela fonctionne !
A noter que le problème ne se pose pas si on installe PostgreSQL à partir du gestionnaire de paquets…

Edit : autre solution :

A priori le problème vient de cette version de la bibliothèque python-psycopg2 (utilisée par Django pour la connexion avec PostgreSQL) qui a en dur le chemin /var/run/postgresql. Une autre solution consiste à spécifier au serveur PostgreSQL le chemin qu’il doit utiliser pour stocker la socket de connexion. Pour ce faire, éditer le fichier postgresql.conf et mettre :

unix_socket_directory = '/var/run/postgresql'

Categories: Informatique Tags: .: django .: postgresql
  1. Svear
    12/10/2009 à 19:13 | #1

    Moi j’ai eu ce problème récemment avec une Debian Lenny parce que j’avais installé mon serveur Postgres 8.4 depuis les sources alors qu’en installant pgadmin3 depuis les dépots, le système m’avait installé le client Postgres 8.3
    J’ai désinstallé tous les clients postgres (mais j’ai laissé les clients compilés depuis la 8.4 qui se trouvent dans /usr/local/postgres/bin) et ensuite, le problème n’est plus apparu… jusqu’au moment où j’ai voulu utiliser psycopg2.connect() en mode socket. Et là, comme dans le post ci-dessus, psycopg2.connect cherchait ce socket dans /var/run/postgresql alors qu’il se trouve dans /tmp.

    Et je suis moi-aussi arrivé à ce lien symbolique mais je ne trouve pas cette soluce propre. J’aurais préféré trouver comment modifier chez le serveur et les clients l’emplacement du socket et ça, je ne trouve pas…

  2. Marco
    13/10/2009 à 06:13 | #2

    Oui tout à fait d’accord cette histoire de lien symbolique n’est pas très propre, je suis toujours à la recherche d’une solution…

  3. Marco
    08/11/2009 à 10:52 | #3

    J’ai trouvé une solution plus propre, voir la section ‘Edit’ en fin d’article.

  1. Pas encore de trackbacks