Назад | Перейти на главную страницу

Не удается подключиться к postgres, установленному в Ubuntu

Я установил Стек 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 (может быть сложно из-за других обратных зависимостей).
  • Исправьте каталог сокетов стороннего пакета, чтобы он был совместим с Debian / Ubuntu.
  • Использовать -h localhost вместо этого подключиться через TCP / IP.
  • Использовать -h /tmp или эквивалент PGHOST установка, чтобы указать на правильный каталог.
  • Не используйте сторонние пакеты.