por must installed espaƱol descargar datos crear consola conectar con postgresql psycopg2

postgresql - must - psycopg2 python 3



No se puede conectar el postgreSQL con psycopg2 (5)

Es la primera vez que no puedo encontrar la respuesta sobre algunos problemas tecnológicos. Aquí están mis problemas:

>> conn=psycopg2.connect(database="mydb", user="postgres", password="123",port=5432) Traceback (most recent call last): File "<stdin>", line 1, in <module> 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"?

  1. Mi postgreSQL se está ejecutando
  2. Mi puerto de escucha es 5432 seguro
  3. root @ lanston-laptop: ~ # psql -l Contraseña:

List of databases Name | Owner | Encoding | Collation | Ctype | Access privileges ---------------+----------+----------+------------+------------+----------------------- checkdatabase | postgres | UTF8 | en_US.utf8 | en_US.utf8 | mydb | postgres | UTF8 | en_US.utf8 | en_US.utf8 | postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 | template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres

¡Muchas gracias!


Intente cambiar el puerto a 5433 en lugar de 5432



Su libpq, que es usado por psycopg2, espera que el socket de Postgres esté en /var/run/postgresql/ pero cuando instala Postgres desde la fuente, está por defecto en /tmp/ .

Compruebe si hay un archivo /tmp/.s.PGSQL.5432 lugar de /var/run/postgresql/.s.PGSQL.5432 . Tratar:

conn=psycopg2.connect( database="mydb", user="postgres", host="/tmp/", password="123" )


unos años después, usando la instalación ''gráfica'' de EnterpriseDB en OSX 10.8, y la instalación de pip de psycopg2 (después de vincular la /Library/...dylib''s como se describe aquí ) tuve este mismo problema.

para mí, el comando de conexión correcto fue conn = psycopg2.connect(''dbname=DBNAME user=postgres password=PWHERE host=/tmp/'')


Tometzky originalmente hacer un comentario a la respuesta de Tometzky , pero bueno, tengo mucho que decir aquí ... Respecto del caso en el que no llamas a psycopg2.connect directamente, sino que utilizas un software de terceros.

tl; dr

Establezca unix_socket_directories en postgresql.conf en /var/run/postgresql, /tmp y reinicie PostgreSQL.

intro

Probé PostgreSQL 9.2 (CentOS 7) y 9.5 (Ubuntu Xenial) de distro repos, PostgreSQL 9.3, 9.4, 9.5, 9.6, 10 en CentOS 7 de PostgreSQL repo , PostgreSQL 9.6, 10 en Ubuntu Xenial de PostgreSQL repo . Entre ellos, solo 9.3 escucha solo /tmp :

$ systemctl stop postgresql-9.4 && systemctl start postgresql-9.3 $ lsof -aUp $(ps --ppid 1 -o pid= -o comm= | awk ''$2 == "postgres" || $2 == "postmaster" {print $1}'') COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME postgres 25455 postgres 4u unix 0xffff9acb23bc5000 0t0 6813995 /tmp/.s.PGSQL.5432 $ systemctl stop postgresql-9.3 && systemctl start postgresql-9.4 $ lsof -aUp $(ps --ppid 1 -o pid= -o comm= | awk ''$2 == "postgres" || $2 == "postmaster" {print $1}'') COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME postgres 26663 postgres 4u unix 0xffff9ac8c5474c00 0t0 7086508 /var/run/postgresql/.s.PGSQL.5432 postgres 26663 postgres 5u unix 0xffff9ac8c5477c00 0t0 7086510 /tmp/.s.PGSQL.5432

python-psycopg2

Eso no es un gran problema con psql , solo es cuestión de ejecutar el binario correspondiente. Pero si usted, por ejemplo, tiene python-psycopg2 instalado desde la base de CentOS o update repositorio. Se vincula dinámicamente a libpq que proporciona el sistema operativo. Con 9.3 y 9.4 OS instalado proporciona la versión 9.4:

$ alternatives --display pgsql-ld-conf pgsql-ld-conf - status is auto. link currently points to /usr/pgsql-10/share/postgresql-9.4-libs.conf /usr/pgsql-9.3/share/postgresql-9.3-libs.conf - priority 930 /usr/pgsql-9.4/share/postgresql-9.4-libs.conf - priority 940 Current `best'' version is /usr/pgsql-9.4/share/postgresql-9.4-libs.conf. $ ls -l /etc/ld.so.conf.d lrwxrwxrwx 1 root root 31 Feb 7 02:25 postgresql-pgdg-libs.conf -> /etc/alternatives/pgsql-ld-conf $ ls -l /etc/alternatives/pgsql-ld-conf lrwxrwxrwx 1 root root 43 Feb 7 02:25 /etc/alternatives/pgsql-ld-conf -> /usr/pgsql-9.4/share/postgresql-9.4-libs.conf $ cat /usr/pgsql-9.4/share/postgresql-9.4-libs.conf /usr/pgsql-9.4/lib/

Pero libpq que viene con PostgreSQL 9.4 busca socket en /var/run/postgresql en lugar de 9.3:

$ strings /usr/pgsql-9.3/lib/libpq.so.5 | egrep ''/(tmp|var)'' /tmp $ strings /usr/pgsql-9.4/lib/libpq.so.5 | egrep ''/(tmp|var)'' /var/run/postgresql

La solución proviene de las secuencias de comandos posteriores a la instalación de los paquetes correspondientes:

$ yum reinstall --downloadonly postgresql94-libs $ rpm -qp /var/cache/yum/x86_64/7/pgdg94/packages/postgresql94-libs-9.4.15-1PGDG.rhel7.x86_64.rpm --scripts postinstall scriptlet (using /bin/sh): /usr/sbin/update-alternatives --install /etc/ld.so.conf.d/postgresql-pgdg-libs.conf pgsql-ld-conf /usr/pgsql-9.4/share/postgresql-9.4-libs.conf 940 /sbin/ldconfig # Drop alternatives entries for common binaries and man files postuninstall scriptlet (using /bin/sh): if [ "$1" -eq 0 ] then /usr/sbin/update-alternatives --remove pgsql-ld-conf /usr/pgsql-9.4/share/postgresql-9.4-libs.conf /sbin/ldconfig fi

Elimine temporalmente la alternativa de 9.4:

$ alternatives --remove pgsql-ld-conf /usr/pgsql-9.4/share/postgresql-9.4-libs.conf $ ldconfig

Cuando termine, postgresql94-libs instalar postgresql94-libs , o agregue la alternativa a la parte de atrás:

$ alternatives --install /etc/ld.so.conf.d/postgresql-pgdg-libs.conf pgsql-ld-conf /usr/pgsql-9.4/share/postgresql-9.4-libs.conf 940 $ ldconfig

pip

Si instala psycopg2 con pip por otro lado, de manera predeterminada instala el paquete precompilado que viene con su propio libpq , que busca el socket en /var/run/postgresql :

$ python3.5 -m venv 1 $ . ./1/bin/activate (1) $ pip install psycopg2 (1) $ python >>> import psycopg2 >>>Ctrl-Z [1]+ Stopped python (1) $ pgrep python 26311 (1) $ grep libpq /proc/26311/maps | head -n 1 7f100b8cb000-7f100b90e000 r-xp 00000000 08:04 112980 /home/yuri/1/lib/python3.5/site-packages/psycopg2/.libs/libpq-909a53d8.so.5.10 (1) $ strings /home/yuri/1/lib/python3.5/site-packages/psycopg2/.libs/libpq-909a53d8.so.5.10 | egrep ''/(tmp|var)'' /var/run /var/run/postgresql

La solución es pedirle a pip que no instale el paquete precompilado y que pg_config de la versión correcta de PostgreSQL esté disponible:

$ PATH=/usr/pgsql-9.3/lib:$PATH pip install --no-binary psycopg2 psycopg2

Incluso puede agregar --no-binary cambiar a --no-binary :

psycopg2==2.7.3.2 --no-binary psycopg2

unix_socket_directories

La opción más fácil es hacer uso de la opción unix_socket_directories :