Я установил стек 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#
Решение:
Сделайте это
export LC_ALL = "en_US.UTF-8"
и это. (9.3 - моя текущая версия PostgreSQL. Напишите свою версию!)
sudo pg_createcluster 9.3 main --start
Я обнаружил, что удаление звуков Postgres неубедительно. Это помогает решить мою проблему:
sudo systemctl start postgresql
sudo systemctl enable postgresql
Подробную информацию можно найти на сайте DigitalOcean Здесь.
У меня была такая же проблема, о которой описал Питер Айзентраут. Используя 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
настроен правильно.
В моем случае это было вызвано опечаткой, которое я сделал при редактировании /etc/postgresql/9.5/main/pg_hba.conf
Я изменил:
# Административный вход в базу данных по Unix-домену сокет local all postgres peer
to:
# Административный вход в базу данных по домену Unix local all postgres MD5
Но MD5
должен был иметь нижний регистр md5
:
# Административный вход в базу данных по Unix доменное локальное все postgres md5
Сообщение об ошибке относится к сокету 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
). -H localhost
для подключения через TCP / IP. -h / tmp
или эквивалентную настройку PGHOST
чтобы указать на правый каталог. Мне пришлось скомпилировать 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 [ ! d7] и
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
.
В моем случае все, что я должен был сделать, это следующее:
sudo service postgresql restart
, а затем
sudo -u postgres psql
Это сработало отлично. Надеюсь, поможет. Приветствия :).
Вы можете использовать psql -U postgres -h localhost
, чтобы заставить соединение происходить через TCP вместо сокетов домена UNIX; ваш вывод netstat
показывает, что сервер PostgreSQL прослушивает порт 5432 локального хоста.
Вы можете узнать, какой локальный UNIX-сокет используется сервером PostgrSQL, используя другую функцию invocavtion netstat :
netstat -lp --protocol = unix | grep postgres
Во всяком случае интерфейсы, на которых прослушивается сервер PostgreSQL, настроены в postgresql.conf
.
Просто создайте такую программную ссылку:
ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
[ ! d2]
В то же время я попытался что-то другое:
Запуск дескриптора postgresql вручную я получил:
FATAL: не удалось создать сегмент разделяемой памяти ... уменьшите размер запроса (в настоящее время 57237504 байта), уменьшите использование общей памяти PostgreSQL, возможно, за счет сокращения shared_buffers или max_connections.
Итак, я сделал, чтобы установить нижний предел для shared_buffers
и max_connections
в postgresql.conf
и перезапустите службу
.
Это исправило проблему!
Вот полный журнал ошибок:
$ sudo service postgresql start * Запуск сервера баз данных PostgreSQL 9.1 * Сервер PostgreSQL не смог начать. Пожалуйста, проверьте выход журнала: 2013-06-26 15:05:11 CEST FATAL: не удалось создать сегмент разделяемой памяти: недопустимый аргумент 2013-06-26 15:05:11 CEST DETAIL: Неудачный системный вызов был shmget (key = 5432001 , размер = 57237504, 03600). 2013-06-26 15:05:11 CEST HINT: эта ошибка обычно означает, что запрос PostgreSQL для сегмента разделяемой памяти превысил параметр SHMMAX вашего ядра. Вы можете уменьшить размер запроса или перенастроить ядро с большим SHMMAX. Чтобы уменьшить размер запроса (в настоящее время 57237504 байта), уменьшите использование общей памяти PostgreSQL, возможно, путем сокращения shared_buffers или max_connections. Если размер запроса уже невелик, возможно, что он меньше, чем параметр SHMMIN вашего ядра, и в этом случае требуется увеличить размер запроса или перенастроить SHMMIN. В документации PostgreSQL содержится дополнительная информация о конфигурации разделяемой памяти.
Решение:
Сделайте это
export LC_ALL = "en_US.UTF-8"
и это. (9.3 - моя текущая версия PostgreSQL. Напишите свою версию!)
sudo pg_createcluster 9.3 main --start
Я обнаружил, что удаление звуков Postgres неубедительно. Это помогает решить мою проблему:
sudo systemctl start postgresql
sudo systemctl enable postgresql
Подробную информацию можно найти на сайте DigitalOcean Здесь.
У меня была такая же проблема, о которой описал Питер Айзентраут. Используя 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
настроен правильно.
В моем случае это было вызвано опечаткой, которое я сделал при редактировании /etc/postgresql/9.5/main/pg_hba.conf
Я изменил:
# Административный вход в базу данных по Unix-домену сокет local all postgres peer
to:
# Административный вход в базу данных по домену Unix local all postgres MD5
Но MD5
должен был иметь нижний регистр md5
:
# Административный вход в базу данных по Unix доменное локальное все postgres md5
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
). -H localhost
для подключения через TCP / IP. -h / tmp
или эквивалентную настройку PGHOST
чтобы указать на правый каталог. Мне пришлось скомпилировать 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 [ ! d7] и
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
.
В моем случае все, что я должен был сделать, это следующее:
sudo service postgresql restart
, а затем
sudo -u postgres psql
Это сработало отлично. Надеюсь, поможет. Приветствия :).
Вы можете использовать psql -U postgres -h localhost
, чтобы заставить соединение происходить через TCP вместо сокетов домена UNIX; ваш вывод netstat
показывает, что сервер PostgreSQL прослушивает порт 5432 локального хоста.
Вы можете узнать, какой локальный UNIX-сокет используется сервером PostgrSQL, используя другую функцию invocavtion netstat :
netstat -lp --protocol = unix | grep postgres
Во всяком случае интерфейсы, на которых прослушивается сервер PostgreSQL, настроены в postgresql.conf
.
Просто создайте такую программную ссылку:
ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
[ ! d2]
В то же время я попытался что-то другое:
Запуск дескриптора postgresql вручную я получил:
FATAL: не удалось создать сегмент разделяемой памяти ... уменьшите размер запроса (в настоящее время 57237504 байта), уменьшите использование общей памяти PostgreSQL, возможно, за счет сокращения shared_buffers или max_connections.
Итак, я сделал, чтобы установить нижний предел для shared_buffers
и max_connections
в postgresql.conf
и перезапустите службу
.
Это исправило проблему!
Вот полный журнал ошибок:
$ sudo service postgresql start * Запуск сервера баз данных PostgreSQL 9.1 * Сервер PostgreSQL не смог начать. Пожалуйста, проверьте выход журнала: 2013-06-26 15:05:11 CEST FATAL: не удалось создать сегмент разделяемой памяти: недопустимый аргумент 2013-06-26 15:05:11 CEST DETAIL: Неудачный системный вызов был shmget (key = 5432001 , размер = 57237504, 03600). 2013-06-26 15:05:11 CEST HINT: эта ошибка обычно означает, что запрос PostgreSQL для сегмента разделяемой памяти превысил параметр SHMMAX вашего ядра. Вы можете уменьшить размер запроса или перенастроить ядро с большим SHMMAX. Чтобы уменьшить размер запроса (в настоящее время 57237504 байта), уменьшите использование общей памяти PostgreSQL, возможно, путем сокращения shared_buffers или max_connections. Если размер запроса уже невелик, возможно, что он меньше, чем параметр SHMMIN вашего ядра, и в этом случае требуется увеличить размер запроса или перенастроить SHMMIN. В документации PostgreSQL содержится дополнительная информация о конфигурации разделяемой памяти.
service postgresql restart
, но он сказал, что у меня не было кластера postgresql. Тогда я нахожу этот способ помочь мне :)
– mymusise
13 September 2016 в 16:45
dpkg-reconfigure locales
очень важен.
– Don Mums
21 February 2017 в 02:35
У меня была та же проблема (на Ubuntu 15.10 (хитрый)). sudo find / -name 'pg_hba.conf' -print
или sudo find / -name 'postgresql.conf' -print
оказалось пустым. До этого казалось, что были установлены несколько экземпляров postgresql.
Возможно, вы столкнулись с подобными ситуациями, когда вы видите как установленные, или проблемы с ошибками в списке
... / postgresql ... / postgresql-9.x
[ ! d19]и т. д.
В этом случае вы должны
sudo apt-get autoremove
каждый пакет 1 на 1.Затем следуя этому к письму, и все будет хорошо. Особенно, когда речь идет о ключевом импорте и добавлении в исходный список FIRST
sudo apt-get update & amp; & amp; & amp; & amp; & amp; & amp; sudo apt-get -y install python-software-properties & amp; & amp; & amp; & amp; wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
Если вы не используете wily, замените
wily
на ваш выпуск, то есть с выходомlsb_release -cs
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ wily-pgdg main" & gt; & gt; & gt; & gt; & gt; /etc/apt/sources.list.d/postgresql.list 'sudo apt-get update & amp; & amp; & amp; & amp; & amp; & amp; sudo apt-get install postgresql-9.3 pgadmin3
И тогда вы должны быть в порядке и иметь возможность подключаться и создавать пользователей.
Ожидаемый результат:
Создание нового кластера 9.3 / main ... config /etc/postgresql/9.3/main data /var/lib/postgresql/9.3/main locale ru_US.UTF-8 socket / var / run / postgresql порт 5432 [ ! d9]
service postgresql restart
, но он сказал, что у меня не было кластера postgresql. Тогда я нахожу этот способ помочь мне :)
– mymusise
13 September 2016 в 16:45
dpkg-reconfigure locales
очень важен.
– Don Mums
21 February 2017 в 02:35
Найдите файл:
sudo find / tmp / -name .s.PGSQL.5432
Результат:
/tmp/.s.PGSQL.5432
Вход как пользователь postgres:
su postgres psql -h / tmp / yourdatabase
service postgresql restart
, но он сказал, что у меня не было кластера postgresql. Тогда я нахожу этот способ помочь мне :)
– mymusise
13 September 2016 в 16:45
dpkg-reconfigure locales
очень важен.
– Don Mums
21 February 2017 в 02:35
Возможно, это могло произойти, потому что вы изменили права доступа к папке /var/lib/postgresql/9.3/main
.
Попробуйте изменить его на 700, используя команду ниже :
sudo chmod 700 main
service postgresql restart
, но он сказал, что у меня не было кластера postgresql. Тогда я нахожу этот способ помочь мне :)
– mymusise
13 September 2016 в 16:45
dpkg-reconfigure locales
очень важен.
– Don Mums
21 February 2017 в 02:35
Мне не удалось решить эту проблему с моим сервером postgres-9.5. После 3-х дней нулевого прогресса, пробовав каждую перестановку исправлений на этом и других сайтах, я решил переустановить сервер и потерять 5 дней работы. Но я повторил проблему в новом экземпляре. Это может дать некоторую перспективу относительно того, как исправить это, прежде чем вы выполните катастрофический подход, который я сделал.
Сначала отключите все параметры ведения журнала в postgresql.conf. Это раздел:
# ERROR REPORTING AND LOGGING
Прокомментируйте все в этом разделе. Затем перезапустите службу.
При перезапуске используйте /etc/init.d/postgresql start
или restart
, когда мне было полезно, чтобы он работал в режиме суперпользователя при перезапуске. У меня было x-окно, открытое только для этой операции. Вы можете установить этот режим суперпользователя с помощью sudo -i
.
Проверить, что к серверу может быть достигнута эта простая команда: psql -l -U postgres
Если это не исправить, тогда рассмотрите this:
Я искал права собственности на многие папки, пытаясь найти решение. Я знал, что, вероятно, я попытаюсь вернуть эти владельцы папок и chmod
s еще 2 дня. Если вы уже перепутали эти владельцы папок и не хотите полностью очищать свой сервер, тогда начните отслеживать настройки для всех затронутых папок, чтобы вернуть их в исходное состояние. Возможно, вы захотите попытаться выполнить параллельную установку на другой системе и систематически проверить права собственности и настройки всех папок. Затрудняюсь, но вы можете получить доступ к своим данным.
Как только вы получите доступ, систематически измените каждую соответствующую строку в секции # ERROR REPORTING AND LOGGING
файла postgresql.conf
. Перезапустите и проверьте. Я обнаружил, что папка по умолчанию для журналов вызывала сбой. Я специально прокомментировал log_directory
. Папка по умолчанию, в которой система записывает журналы, равна /var/log/postgresql
.
Я делаю это, делая это:
dpkg-reconfigure locales
Выберите предпочтительные локали, затем запустите
pg_createcluster 9.5 main --start
(9.5 - это моя версия postgresql)
/etc/init.d/postgresql start
, а затем он работает!
sudo su - postgres
psql
Это работает для меня:
Редактировать: postgresql.conf
sudo nano /etc/postgresql/9.3/main/postgresql.conf
Включить или добавить:
listen_addresses = '*'
Перезапустить механизм базы данных:
sudo service postgresql restart
Также вы можете проверить файл pg_hba.conf
sudo nano /etc/postgresql/9.3/main/pg_hba.conf
И добавить свой адрес сети или хоста:
host all all 192.168.1.0/24 md5
Эта проблема возникает из установки пакета postgres
без номера версии. Хотя postgres
будет установлен, и это будет правильная версия, скрипт для настройки кластера будет работать неправильно; это проблема упаковки.
Если вам удобно с postgres
, вы можете запустить скрипт для создания этого кластера и запустить postgres
. Однако есть более простой способ.
Сначала очистите старую установку postgres. В настоящее время проблема заключается в 9.1, поэтому я предполагаю, что это то, что вы установили
sudo apt-get remove --purge postgresql-9.1
Теперь просто переустановите
sudo apt-get install postgresql-9.1
Обратите внимание на имя пакета с номером версии. НТН.