Не удается подключиться к postgresql на порту 5432

Я установил стек 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#
63
задан 26 June 2011 в 17:26

87 ответов

Решение:

Сделайте это

export LC_ALL="en_US.UTF-8"

и это. ( Решение: - моя текущая версия PostgreSQL. Напишите свою версию!)

sudo pg_createcluster 9.3 main --start
3
ответ дан 25 July 2018 в 21:40
  • 1
    woooow, это было единственное решение моей проблемы, спасибо. – user3687723 18 July 2016 в 01:25

Я обнаружил, что удаление звуков Postgres неубедительно. Это помогает решить мою проблему:

Запустить сервер postgres: sudo systemctl start postgresql Убедитесь, что сервер запускается при загрузке: sudo systemctl enable postgresql

Подробную информацию можно найти на сайте DigitalOcean здесь .

0
ответ дан 25 July 2018 в 21:40

У меня была такая же проблема, о которой описал Питер Айзентраут. С помощью команды netstat -nlp | grep 5432 я мог видеть, что сервер прослушивает сокет /tmp/.s.PGSQL.5432.

Чтобы исправить это, просто отредактируйте файл postgresql.conf и измените следующие строки:

listen_addresses = '*' unix_socket_directories = '/var/run/postgresql'

Теперь запустите service postgresql-9.4 restart (замените 9-4 своей версией), и теперь должны работать удаленные подключения.

Теперь, чтобы разрешить локальные подключения, просто создайте символическую ссылку на /var/run/postgresql каталог

ln -s /var/run/postgresql/.s.PGSQL.5432 /tmp/.s.PGSQL.5432

Не забудьте убедиться, что ваш pg_hba.conf настроен правильно.

0
ответ дан 25 July 2018 в 21:40

В моем случае это было вызвано опечаткой, которое я сделал при редактировании /etc/postgresql/9.5/main/pg_hba.conf

Я изменил:

# Database administrative login by Unix domain socket local all postgres peer

на:

# Database administrative login by Unix domain socket local all postgres MD5

Но MD5 должен был быть строчным md5:

# Database administrative login by Unix domain socket local all postgres md5
2
ответ дан 25 July 2018 в 21:40
  • 1
    Это ответ, который исправил это для меня :) Я ранее менял свой вариант на trusted вместо trust и не перезапускал сервис, и он только сломался на следующий день, когда я уже забыл, что я изменил – Phlippie Bosman 31 March 2018 в 10:25

Сообщение об ошибке относится к сокету 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, чтобы указать на правый каталог. Не используйте сторонние пакеты.
19
ответ дан 25 July 2018 в 21:40

Мне пришлось скомпилировать PostgreSQL 8.1 в Debian Squeeze, потому что я использую Project Open, основанный на OpenACS, и не буду работать в более поздних версиях PostgreSQL.

Конфигурация компиляции по умолчанию ставит unix_socket в /tmp, но Project Open, который полагается на PostgreSQL, не будет работать, потому что он ищет unix_socket в /var/run/postgresql.

В настройке postgresql.conf установлена ​​настройка гнезда. Моя проблема заключалась в том, что либо я мог установить, что /tmp и psql работал, но не открыт для проекта, или я мог установить его для /var/run/postgresql, а psql не работал, но проект был открытым.

Одно из решений этой проблемы - установить сокет для /var/run/postgresql, а затем запустить psql на основе предложения Питера, как:

psql -h /var/run/postgresql

Это выполняется локально с использованием локальных разрешений. Единственный недостаток заключается в том, что он больше набирает текст, чем просто «psql».

Другое предложение, которое кто-то сделал, это создать символическую связь между двумя местоположениями. Это также сработало, но ссылка исчезла при перезагрузке. Возможно, проще просто использовать аргумент -h, однако я создал символическую ссылку из сценария PostgreSQL в /etc/init.d. Я поместил символическую ссылку создать команду в разделе «Начало». Конечно, когда я выдаю команду «Стоп» и «Запустить или перезапустить», она попытается воссоздать существующую символическую ссылку, но, помимо предупреждения, в этом нет вреда.

В моем случае вместо этого of:

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

Я

ln -s /var/run/postgresql/.s.PGSQL.5432 /tmp/.s.PGSQL.5432

и явно установил unix_socket в /var/run/postgresql/.s.PGSQL.5432 в postgresql.conf.

5
ответ дан 25 July 2018 в 21:40

В моем случае все, что я должен был сделать, это следующее:

sudo service postgresql restart

, а затем

sudo -u postgres psql

Это сработало просто отлично. Надеюсь, поможет. Приветствия :).

0
ответ дан 25 July 2018 в 21:40

Вы можете использовать psql -U postgres -h localhost, чтобы заставить соединение происходить через TCP вместо сокетов домена UNIX; ваш выход netstat показывает, что сервер PostgreSQL прослушивает порт 5432 локального хоста.

Вы можете узнать, какой локальный сокет UNIX используется сервером PostgrSQL, используя другую invocavtion netstat:

netstat -lp --protocol=unix | grep postgres

В любом случае интерфейсы, на которых прослушивается сервер PostgreSQL, настроены в postgresql.conf.

16
ответ дан 25 July 2018 в 21:40

Просто создайте такую ​​программную ссылку:

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
15
ответ дан 25 July 2018 в 21:40
  • 1
    Это сработало для меня и показалось, что это самое простое решение без необходимости изменять конфигурацию postgresql. Убедитесь, что вы являетесь суперпользователем при попытке сделать ссылку. – brendan 8 March 2013 в 02:11
  • 2
    ln: не удалось создать символическую ссылку '/var/run/postgresql/.s.PGSQL.5432': файл существует – P_M 27 October 2017 в 09:50
  • 3
    Я создал & quot; postgresql & quot; папку в каталоге / var / run /. Этого не было. – Ikrom 10 June 2018 в 09:51

В то же время я попытался что-то другое:

Запустив дескриптор postgresql вручную, я получил:

FATAL: could not create shared memory segment ... To reduce the request size (currently 57237504 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.

Итак, я сделал, чтобы установить нижний предел для shared_buffers и max_connections в postgresql.conf и restart службу.

Это исправило проблему!

Вот полный журнал ошибок:

$ sudo service postgresql start * Starting PostgreSQL 9.1 database server * The PostgreSQL server failed to start. Please check the log output: 2013-06-26 15:05:11 CEST FATAL: could not create shared memory segment: Invalid argument 2013-06-26 15:05:11 CEST DETAIL: Failed system call was shmget(key=5432001, size=57237504, 03600). 2013-06-26 15:05:11 CEST HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter. You can either reduce the request size or reconfigure the kernel with larger SHMMAX. To reduce the request size (currently 57237504 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections. If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for. The PostgreSQL documentation contains more information about shared memory configuration.
0
ответ дан 25 July 2018 в 21:40
  • 1
    это помогло мне с postgres 9.3. – sevenseacat 30 July 2014 в 06:49
  • 2
    Это должен быть принятый ответ, работает с postgres 9.4 / ubuntu 14.10, тоже – Malte 8 April 2015 в 13:09
  • 3
    listen_address = '*' сделал трюк. он слушал только «localhost», а не на 127.0.0.1. Спасибо! – mwm 26 June 2015 в 02:06
  • 4
    этот ответ помог мне с перемешиванием postgres 9.4 и 9.3. Круто. – ingo 6 December 2015 в 16:20
  • 5
    Работал для ubuntu 16.04 и postgres 9.5, но сначала должен был очистить каждый пакет postgres. – Evert 27 April 2016 в 15:38
  • 6
    Это действительно потрясающий ответ! А также ужасный пользовательский интерфейс на стороне postgres – user1952500 23 July 2016 в 09:04
  • 7
    мой бог ... наконец-то что-то сработало - ничего больше не работало, пока я не добавил адрес и без комментариев в listen_address. – AntonB 9 August 2016 в 21:09
  • 8
    Ха, прости, я думаю, что команды ясно дали понять. для меня, я встречаю эту проблему, когда я переустанавливаю postgresql, я пытаюсь перезапустить его по типу service postgresql restart , но он говорит, что у меня не было кластера postgresql. Тогда я нахожу этот способ помочь мне :) – mymusise 13 September 2016 в 16:45
  • 9
    Плюс один! Это сработало для меня. – Atul Makwana 6 October 2016 в 23:18
  • 10
    Ну, после трех часов работы в Google, вы, наконец, исправили мою проблему. dpkg-reconfigure locales довольно чертовски важно. – Don Mums 21 February 2017 в 02:35
  • 11
    это работает на ubuntu windows bash. – ahmadalibaloch 18 April 2018 в 11:21

Решение:

Сделайте это

export LC_ALL="en_US.UTF-8"

и это. ( Решение: - моя текущая версия PostgreSQL. Напишите свою версию!)

sudo pg_createcluster 9.3 main --start
3
ответ дан 31 July 2018 в 10:28
  • 1
    woooow, это было единственное решение моей проблемы, спасибо. – user3687723 18 July 2016 в 01:25

Я обнаружил, что удаление звуков Postgres неубедительно. Это помогает решить мою проблему:

Запустить сервер postgres: sudo systemctl start postgresql Убедитесь, что сервер запускается при загрузке: sudo systemctl enable postgresql

Подробную информацию можно найти на сайте DigitalOcean здесь .

0
ответ дан 31 July 2018 в 10:28

У меня была такая же проблема, о которой описал Питер Айзентраут. Используя команду netstat -nlp | grep 5432, я мог видеть, что сервер прослушивает сокет /tmp/.s.PGSQL.5432.

Чтобы исправить это, просто отредактируйте файл postgresql.conf и измените следующие строки:

listen_addresses = '*' unix_socket_directories = '/var/run/postgresql'

Теперь запустите service postgresql-9.4 restart (замените 9-4 своей версией), и теперь должны работать удаленные подключения.

Теперь, чтобы разрешить локальные подключения, просто создайте символическую ссылку на /var/run/postgresql каталог

ln -s /var/run/postgresql/.s.PGSQL.5432 /tmp/.s.PGSQL.5432

Не забудьте убедиться, что ваш pg_hba.conf настроен правильно.

0
ответ дан 31 July 2018 в 10:28

В моем случае это было вызвано опечаткой, которое я сделал при редактировании /etc/postgresql/9.5/main/pg_hba.conf

Я изменил:

# Database administrative login by Unix domain socket local all postgres peer

на:

# Database administrative login by Unix domain socket local all postgres MD5

Но MD5 должен был быть строчным md5:

# Database administrative login by Unix domain socket local all postgres md5
2
ответ дан 31 July 2018 в 10:28
  • 1
    Это ответ, который исправил это для меня :) Я ранее менял свой вариант на trusted вместо trust и не перезапускал сервис, и он только сломался на следующий день, когда я уже забыл, что я изменил – Phlippie Bosman 31 March 2018 в 10:25

Сообщение об ошибке относится к сокету 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, чтобы указать на правый каталог. Не используйте сторонние пакеты.
19
ответ дан 31 July 2018 в 10:28

Мне пришлось скомпилировать PostgreSQL 8.1 в Debian Squeeze, потому что я использую Project Open, основанный на OpenACS, и не буду работать в более поздних версиях PostgreSQL.

Конфигурация компиляции по умолчанию ставит unix_socket в /tmp, но Project Open, который полагается на PostgreSQL, не будет работать, потому что он ищет unix_socket в /var/run/postgresql.

В настройке postgresql.conf установлена ​​настройка гнезда. Моя проблема заключалась в том, что либо я мог установить, что /tmp и psql работал, но не открыт для проекта, или я мог установить его для /var/run/postgresql, а psql не работал, но проект был открытым.

Одно из решений этой проблемы - установить сокет для /var/run/postgresql, а затем запустить psql на основе предложения Питера, как:

psql -h /var/run/postgresql

Это выполняется локально с использованием локальных разрешений. Единственный недостаток заключается в том, что он больше набирает текст, чем просто «psql».

Другое предложение, которое кто-то сделал, это создать символическую связь между двумя местоположениями. Это также сработало, но ссылка исчезла при перезагрузке. Возможно, проще просто использовать аргумент -h, однако я создал символическую ссылку из сценария PostgreSQL в /etc/init.d. Я поместил символическую ссылку создать команду в разделе «Начало». Конечно, когда я выдаю команду «Стоп» и «Запустить или перезапустить», она попытается воссоздать существующую символическую ссылку, но, помимо предупреждения, в этом нет вреда.

В моем случае вместо этого of:

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

Я

ln -s /var/run/postgresql/.s.PGSQL.5432 /tmp/.s.PGSQL.5432

и явно установил unix_socket в /var/run/postgresql/.s.PGSQL.5432 в postgresql.conf.

5
ответ дан 31 July 2018 в 10:28

В моем случае все, что я должен был сделать, это следующее:

sudo service postgresql restart

, а затем

sudo -u postgres psql

Это сработало просто отлично. Надеюсь, поможет. Приветствия :).

0
ответ дан 31 July 2018 в 10:28

Вы можете использовать psql -U postgres -h localhost, чтобы заставить соединение происходить через TCP вместо сокетов домена UNIX; ваш выход netstat показывает, что сервер PostgreSQL прослушивает порт 5432 локального хоста.

Вы можете узнать, какой локальный сокет UNIX используется сервером PostgrSQL, используя другую invocavtion netstat:

netstat -lp --protocol=unix | grep postgres

В любом случае интерфейсы, на которых прослушивается сервер PostgreSQL, настроены в postgresql.conf.

16
ответ дан 31 July 2018 в 10:28

Просто создайте такую ​​программную ссылку:

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
15
ответ дан 31 July 2018 в 10:28
  • 1
    Это сработало для меня и показалось, что это самое простое решение без необходимости изменять конфигурацию postgresql. Убедитесь, что вы являетесь суперпользователем при попытке сделать ссылку. – brendan 8 March 2013 в 02:11
  • 2
    ln: не удалось создать символическую ссылку '/var/run/postgresql/.s.PGSQL.5432': файл существует – P_M 27 October 2017 в 09:50
  • 3
    Я создал & quot; postgresql & quot; папку в каталоге / var / run /. Этого не было. – Ikrom 10 June 2018 в 09:51

В то же время я попытался что-то другое:

Запустив дескриптор postgresql вручную, я получил:

FATAL: could not create shared memory segment ... To reduce the request size (currently 57237504 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.

Итак, я сделал, чтобы установить нижний предел для shared_buffers и max_connections в postgresql.conf и restart службу.

Это исправило проблему!

Вот полный журнал ошибок:

$ sudo service postgresql start * Starting PostgreSQL 9.1 database server * The PostgreSQL server failed to start. Please check the log output: 2013-06-26 15:05:11 CEST FATAL: could not create shared memory segment: Invalid argument 2013-06-26 15:05:11 CEST DETAIL: Failed system call was shmget(key=5432001, size=57237504, 03600). 2013-06-26 15:05:11 CEST HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter. You can either reduce the request size or reconfigure the kernel with larger SHMMAX. To reduce the request size (currently 57237504 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections. If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for. The PostgreSQL documentation contains more information about shared memory configuration.
68
ответ дан 31 July 2018 в 10:28
  • 1
    это помогло мне с postgres 9.3. – sevenseacat 30 July 2014 в 06:49
  • 2
    Это должен быть принятый ответ, работает с postgres 9.4 / ubuntu 14.10, тоже – Malte 8 April 2015 в 13:09
  • 3
    listen_address = '*' сделал трюк. он слушал только «localhost», а не на 127.0.0.1. Спасибо! – mwm 26 June 2015 в 02:06
  • 4
    этот ответ помог мне с перемешиванием postgres 9.4 и 9.3. Круто. – ingo 6 December 2015 в 16:20
  • 5
    Работал для ubuntu 16.04 и postgres 9.5, но сначала должен был очистить каждый пакет postgres. – Evert 27 April 2016 в 15:38
  • 6
    Это действительно потрясающий ответ! А также ужасный пользовательский интерфейс на стороне postgres – user1952500 23 July 2016 в 09:04
  • 7
    мой бог ... наконец-то что-то сработало - ничего больше не работало, пока я не добавил адрес и без комментариев в listen_address. – AntonB 9 August 2016 в 21:09
  • 8
    Ха, прости, я думаю, что команды ясно дали понять. для меня, я встречаю эту проблему, когда я переустанавливаю postgresql, я пытаюсь перезапустить его по типу service postgresql restart , но он говорит, что у меня не было кластера postgresql. Тогда я нахожу этот способ помочь мне :) – mymusise 13 September 2016 в 16:45
  • 9
    Плюс один! Это сработало для меня. – Atul Makwana 6 October 2016 в 23:18
  • 10
    Ну, после трех часов работы в Google, вы, наконец, исправили мою проблему. dpkg-reconfigure locales довольно чертовски важно. – Don Mums 21 February 2017 в 02:35
  • 11
    это работает на ubuntu windows bash. – ahmadalibaloch 18 April 2018 в 11:21

Решение:

Сделайте это

export LC_ALL="en_US.UTF-8"

и это. ( Решение: - моя текущая версия PostgreSQL. Напишите свою версию!)

sudo pg_createcluster 9.3 main --start
3
ответ дан 2 August 2018 в 03:16
  • 1
    woooow, это было единственное решение моей проблемы, спасибо. – user3687723 18 July 2016 в 01:25

Я обнаружил, что удаление звуков Postgres неубедительно. Это помогает решить мою проблему:

Запустить сервер postgres: sudo systemctl start postgresql Убедитесь, что сервер запускается при загрузке: sudo systemctl enable postgresql

Подробную информацию можно найти на сайте DigitalOcean здесь .

0
ответ дан 2 August 2018 в 03:16

У меня была такая же проблема, о которой описал Питер Айзентраут. Используя команду netstat -nlp | grep 5432, я мог видеть, что сервер прослушивает сокет /tmp/.s.PGSQL.5432.

Чтобы исправить это, просто отредактируйте файл postgresql.conf и измените следующие строки:

listen_addresses = '*' unix_socket_directories = '/var/run/postgresql'

Теперь запустите service postgresql-9.4 restart (замените 9-4 своей версией), и теперь должны работать удаленные подключения.

Теперь, чтобы разрешить локальные подключения, просто создайте символическую ссылку на /var/run/postgresql каталог

ln -s /var/run/postgresql/.s.PGSQL.5432 /tmp/.s.PGSQL.5432

Не забудьте убедиться, что ваш pg_hba.conf настроен правильно.

0
ответ дан 2 August 2018 в 03:16

В моем случае это было вызвано опечаткой, которое я сделал при редактировании /etc/postgresql/9.5/main/pg_hba.conf

Я изменил:

# Database administrative login by Unix domain socket local all postgres peer

на:

# Database administrative login by Unix domain socket local all postgres MD5

Но MD5 должен был быть строчным md5:

# Database administrative login by Unix domain socket local all postgres md5
2
ответ дан 2 August 2018 в 03:16
  • 1
    Это ответ, который исправил это для меня :) Я ранее менял свой вариант на trusted вместо trust и не перезапускал сервис, и он только сломался на следующий день, когда я уже забыл, что я изменил – Phlippie Bosman 31 March 2018 в 10:25

Сообщение об ошибке относится к сокету 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, чтобы указать на правый каталог. Не используйте сторонние пакеты.
19
ответ дан 2 August 2018 в 03:16

Мне пришлось скомпилировать PostgreSQL 8.1 в Debian Squeeze, потому что я использую Project Open, основанный на OpenACS, и не буду работать в более поздних версиях PostgreSQL.

Конфигурация компиляции по умолчанию ставит unix_socket в /tmp, но Project Open, который полагается на PostgreSQL, не будет работать, потому что он ищет unix_socket в /var/run/postgresql.

В настройке postgresql.conf установлена ​​настройка гнезда. Моя проблема заключалась в том, что либо я мог установить, что /tmp и psql работал, но не открыт для проекта, или я мог установить его для /var/run/postgresql, а psql не работал, но проект был открытым.

Одно из решений этой проблемы - установить сокет для /var/run/postgresql, а затем запустить psql на основе предложения Питера, как:

psql -h /var/run/postgresql

Это выполняется локально с использованием локальных разрешений. Единственный недостаток заключается в том, что он больше набирает текст, чем просто «psql».

Другое предложение, которое кто-то сделал, это создать символическую связь между двумя местоположениями. Это также сработало, но ссылка исчезла при перезагрузке. Возможно, проще просто использовать аргумент -h, однако я создал символическую ссылку из сценария PostgreSQL в /etc/init.d. Я поместил символическую ссылку создать команду в разделе «Начало». Конечно, когда я выдаю команду «Стоп» и «Запустить или перезапустить», она попытается воссоздать существующую символическую ссылку, но, помимо предупреждения, в этом нет вреда.

В моем случае вместо этого of:

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

Я

ln -s /var/run/postgresql/.s.PGSQL.5432 /tmp/.s.PGSQL.5432

и явно установил unix_socket в /var/run/postgresql/.s.PGSQL.5432 в postgresql.conf.

5
ответ дан 2 August 2018 в 03:16

В моем случае все, что я должен был сделать, это следующее:

sudo service postgresql restart

, а затем

sudo -u postgres psql

Это сработало просто отлично. Надеюсь, поможет. Приветствия :).

0
ответ дан 2 August 2018 в 03:16

Вы можете использовать psql -U postgres -h localhost, чтобы заставить соединение происходить через TCP вместо сокетов домена UNIX; ваш выход netstat показывает, что сервер PostgreSQL прослушивает порт 5432 локального хоста.

Вы можете узнать, какой локальный сокет UNIX используется сервером PostgrSQL, используя другую invocavtion netstat:

netstat -lp --protocol=unix | grep postgres

В любом случае интерфейсы, на которых прослушивается сервер PostgreSQL, настроены в postgresql.conf.

16
ответ дан 2 August 2018 в 03:16

Просто создайте такую ​​программную ссылку:

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
15
ответ дан 2 August 2018 в 03:16
  • 1
    Это сработало для меня и показалось, что это самое простое решение без необходимости изменять конфигурацию postgresql. Убедитесь, что вы являетесь суперпользователем при попытке сделать ссылку. – brendan 8 March 2013 в 02:11
  • 2
    ln: не удалось создать символическую ссылку '/var/run/postgresql/.s.PGSQL.5432': файл существует – P_M 27 October 2017 в 09:50
  • 3
    Я создал & quot; postgresql & quot; папку в каталоге / var / run /. Этого не было. – Ikrom 10 June 2018 в 09:51

В то же время я попытался что-то другое:

Запустив дескриптор postgresql вручную, я получил:

FATAL: could not create shared memory segment ... To reduce the request size (currently 57237504 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.

Итак, я сделал, чтобы установить нижний предел для shared_buffers и max_connections в postgresql.conf и restart службу.

Это исправило проблему!

Вот полный журнал ошибок:

$ sudo service postgresql start * Starting PostgreSQL 9.1 database server * The PostgreSQL server failed to start. Please check the log output: 2013-06-26 15:05:11 CEST FATAL: could not create shared memory segment: Invalid argument 2013-06-26 15:05:11 CEST DETAIL: Failed system call was shmget(key=5432001, size=57237504, 03600). 2013-06-26 15:05:11 CEST HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter. You can either reduce the request size or reconfigure the kernel with larger SHMMAX. To reduce the request size (currently 57237504 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections. If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for. The PostgreSQL documentation contains more information about shared memory configuration.
68
ответ дан 2 August 2018 в 03:16
  • 1
    это помогло мне с postgres 9.3. – sevenseacat 30 July 2014 в 06:49
  • 2
    Это должен быть принятый ответ, работает с postgres 9.4 / ubuntu 14.10, тоже – Malte 8 April 2015 в 13:09
  • 3
    listen_address = '*' сделал трюк. он слушал только «localhost», а не на 127.0.0.1. Спасибо! – mwm 26 June 2015 в 02:06
  • 4
    этот ответ помог мне с перемешиванием postgres 9.4 и 9.3. Круто. – ingo 6 December 2015 в 16:20
  • 5
    Работал для ubuntu 16.04 и postgres 9.5, но сначала должен был очистить каждый пакет postgres. – Evert 27 April 2016 в 15:38
  • 6
    Это действительно потрясающий ответ! А также ужасный пользовательский интерфейс на стороне postgres – user1952500 23 July 2016 в 09:04
  • 7
    мой бог ... наконец-то что-то сработало - ничего больше не работало, пока я не добавил адрес и без комментариев в listen_address. – AntonB 9 August 2016 в 21:09
  • 8
    Ха, прости, я думаю, что команды ясно дали понять. для меня, я встречаю эту проблему, когда я переустанавливаю postgresql, я пытаюсь перезапустить его по типу service postgresql restart , но он говорит, что у меня не было кластера postgresql. Тогда я нахожу этот способ помочь мне :) – mymusise 13 September 2016 в 16:45
  • 9
    Плюс один! Это сработало для меня. – Atul Makwana 6 October 2016 в 23:18
  • 10
    Ну, после трех часов работы в Google, вы, наконец, исправили мою проблему. dpkg-reconfigure locales довольно чертовски важно. – Don Mums 21 February 2017 в 02:35
  • 11
    это работает на ubuntu windows bash. – ahmadalibaloch 18 April 2018 в 11:21

Другие вопросы по тегам:

Похожие вопросы: