Я установил Стек Bitnami Django который включал PostgreSQL 8.4.
Когда я бегу psql -U postgres
Я получаю следующую ошибку:
psql: 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"?
PG определенно работает, и pg_hba.conf
файл выглядит так:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
Что дает?
«Доказательство» того, что pg запущен:
root@assaf-desktop:/home/assaf# ps axf | grep postgres
14338 ? S 0:00 /opt/djangostack-1.3-0/postgresql/bin/postgres -D /opt/djangostack-1.3-0/postgresql/data -p 5432
14347 ? Ss 0:00 \_ postgres: writer process
14348 ? Ss 0:00 \_ postgres: wal writer process
14349 ? Ss 0:00 \_ postgres: autovacuum launcher process
14350 ? Ss 0:00 \_ postgres: stats collector process
15139 pts/1 S+ 0:00 \_ grep --color=auto postgres
root@assaf-desktop:/home/assaf# netstat -nltp | grep 5432
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 14338/postgres
tcp6 0 0 ::1:5432 :::* LISTEN 14338/postgres
root@assaf-desktop:/home/assaf#
Я использую следующий обходной путь, поэтому оба клиента должны быть довольны:
sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
Предположительно вы используете системную версию psql
команда, которая будет искать сокеты домена postgres unix в /var/run/postgresql
и сторонние postgres, которые вы используете, были настроены для их размещения в другом месте.
Самое простое решение - использовать /opt/djangostack-1.3-0/postgresql/bin/psql
вместо этого, предполагая, что он есть, поскольку он предположительно будет искать в правильном месте для сокетов unix.
В противном случае вам нужно посмотреть на unix_socket_directory
установка в postgresql.conf
но вполне вероятно, что он будет закомментирован, и он использует скомпилированный по умолчанию.
Сообщение об ошибке относится к сокету домена Unix, поэтому вам необходимо настроить свой netstat
призыв не исключать их. Так что попробуйте без опции -t
:
netstat -nlp | grep 5432
Я бы предположил, что сервер на самом деле прослушивает сокет /tmp/.s.PGSQL.5432
а не /var/run/postgresql/.s.PGSQL.5432
к которому ваш клиент пытается подключиться. Это типичная проблема при использовании скомпилированных вручную или сторонних пакетов PostgreSQL в Debian или Ubuntu, поскольку исходным кодом по умолчанию для каталога сокетов домена Unix является /tmp
но пакет Debian меняет его на /var/run/postgresql
.
Возможные обходные пути:
/opt/djangostack-1.3-0/postgresql/bin/psql
). Возможно полное удаление пакетов, поставляемых Ubuntu (может быть сложно из-за других обратных зависимостей).-h localhost
вместо этого подключиться через TCP / IP.-h /tmp
или эквивалент PGHOST
установка, чтобы указать на правильный каталог.