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

Приложение Postgres пытается использовать неверный файл сокета

У меня работает локальный сервер postgres (на Ubuntu Linux). Он прослушивает файл сокета:

$ ls -la /var/run/postgresql/
total 8
drwxrwsrwx  2 postgres postgres  100 2011-04-15 19:06 .
drwxr-xr-x 26 root     root     1100 2011-04-15 19:12 ..
-rw-------  1 postgres postgres    5 2011-04-15 19:06 8.4-main.pid
srwxrwxrwx  1 postgres postgres    0 2011-04-15 19:06 .s.PGSQL.5433
-rw-------  1 postgres postgres   34 2011-04-15 19:06 .s.PGSQL.5433.lock

Я могу нормально подключиться к серверу из командной строки:

$ psql -d gis -U rory
psql (8.4.7)
Type "help" for help.

gis=# \q
$ psql -d gis
psql (8.4.7)
Type "help" for help.

 gis=# \q

Я пытаюсь использовать osm2pgsql, приложение от Проект OpenStreetMap, который импортирует данные в базу данных pgsql.

Однако я получаю следующую ошибку:

$ ./osm2pgsql/osm2pgsql -m -d gis -U rory ../data.osm.bz2 
osm2pgsql SVN version 0.70.5

Connection to database failed: 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"?

Примечательно, что он пытается использовать файл сокета .s.PGSQL.5432, которого не существует, тогда как фактическое имя файла сокета .s.PGSQL.5433, имена файлов практически совпадают.

Почему он использует неправильное имя файла и как мне заставить его использовать правильное?

Похоже, ваш сервер PostgreSQL настроен на прослушивание порта 5433, а не 5432 по умолчанию. Ваше клиентское приложение Postgres принимает значение по умолчанию и, таким образом, не находит сокет. Попробуйте установить PGPORT переменная среды на 5433 перед запуском приложения. Например.:

PGPORT=5433 ./osm2pgsql/osm2pgsql -m -d gis -U rory ../data.osm.bz2

Для меня исправление этой ошибки помогло мне добавить -H localhost в команду (хотя интуитивно мне не следовало этого делать)

то есть:

 osm2pgsql -H localhost -s -d foo switzerland-latest.osm.pbf

Предостережение: я использую порт postgres 5432 по умолчанию, хотя