美洲狮(OS X Server)中缺少套接字文件“ /var/pgsql_socket/.s.PGSQL.5432”


95

我刚刚使用OS X Server将MacMini Server从Lion Server升级到Mountain Lion。与PostgreSQL一样,我去年安装Lion Server时遇到了同样的问题。

当我尝试执行任何一种PostgreSQL终端命令时,我会收到以下臭名昭著的错误消息,这些错误消息多年来已经得到了解决:

psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

出现错误时,我试图更改_postgres的密码。我尝试了几个命令,但是得到了相同的错误。我只是重新启动了服务器,但是没有运气。我以root用户身份登录,查看/ var / pgsql_socket,文件夹为空。文件夹/ var / pgsql_socket_alt也为空。

我已经在网上检查了一下。但是,我阅读的几乎所有解决方案(包括Stack Overflow上)都建议删除并重新安装PostgreSQL。我不知道,但这似乎不是一个可行的选择,因为Server App上的几个选项都使用PostgreSQL。我联系了Apple Enterprise支持部门(未达成协议),并被告知开发人员必须解决我的问题,否则将投入695美元。

我有一个现在关闭的网站,因为我无法重建它。目前,我不知道该向哪里寻求帮助。我将继续在线寻找是否可以找到一些东西。但是,我希望有人能尽快给我答案,以便我重建数据库。

更新:2012年12月13日15:33 GMT-6

这是ps auwwx | grep postg的输出:

_postgres      28123   0.0  0.1  2479696   7724   ??  Ss    3:01PM   0:00.04 /Applications/Server.app/Contents/ServerRoot/usr/bin/postgres_real -D /Library/Server/PostgreSQL For Server Services/Data -c listen_addresses= -c log_connections=on -c log_directory=/Library/Logs/PostgreSQL -c log_filename=PostgreSQL_Server_Services.log -c log_line_prefix=%t  -c log_lock_waits=on -c log_statement=ddl -c logging_collector=on -c unix_socket_directory=/Library/Server/PostgreSQL For Server Services/Socket -c unix_socket_group=_postgres -c unix_socket_permissions=0770
server1        28216   0.0  0.0  2432768    620 s000  R+    3:02PM   0:00.00 grep postg
_postgres      28138   0.0  0.0  2439388    752   ??  Ss    3:01PM   0:00.01 postgres: stats collector process                           
_postgres      28137   0.0  0.0  2479828   1968   ??  Ss    3:01PM   0:00.00 postgres: autovacuum launcher process                           
_postgres      28136   0.0  0.0  2479696    544   ??  Ss    3:01PM   0:00.00 postgres: wal writer process                           
_postgres      28135   0.0  0.0  2479696    732   ??  Ss    3:01PM   0:00.01 postgres: writer process                           
_postgres      28134   0.0  0.0  2479696    592   ??  Ss    3:01PM   0:00.00 postgres: checkpointer process                           
_postgres      28131   0.0  0.0  2439388    368   ??  Ss    3:01PM   0:00.00 postgres: logger process 

更新:2012年12月13日18:10 GMT-6

经过密集的网络搜索后,发现了该视频。我能够使PostgreSQL运行并删除错误。我可以使用pgadmin和phppgadmin进行连接。由于无奈,我正要回到Lion Server。现在,我将不必。

http://www.youtube.com/watch?v=y1c7WFMMkZ4


22
你的问题归结为一个事实,即PostgreSQL的的Mac OS X的预装版本psql是在你PATH安装之前的版本。他们在不同的地方寻找unix套接字。通过指定tcp / ip -h localhost或最好对其进行修复,PATH以便psql首先找到正确的地址。苹果公司不仅决定捆绑PostgreSQL,而且将它弄乱,因此将其放置在非标准的地方,这是这个问题的根本原因。
Craig Ringer

3
OSX中存在一个持续存在的问题,包装商决定将unix域套接字放置在与正常位置不同的位置。让我搜索... BRB ... stackoverflow.com/a/8482546/905902
wildplasser 2012年

我在.bashrc中复制了一个旧的PATH。我尚未安装其他版本的postgreSQL。这是我的PATH语句,其中包含RVM的代码。如果有人可以告诉我将其更改为什么,我会这样做。当我执行哪个psql时,可以在/ usr / bin / psql中找到它。非常感谢大家的帮助。PATH =“ $ PATH:$ HOME / .rvm / bin:/ usr / bin / psql:/ usr / local:/ usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin”我还以root用户身份登录时正在搜索套接字文件。
Pamela Cook-LightBe Corp 2012年

1
对于使用homebrewosx@CraigRinger的用户,可能会找到正确的答案,请通过确认brew doctor
Karthik T 2014年

Answers:


299

我能够将以下内容添加到我的.bash_profile中以防止该错误:

export PGHOST=localhost

之所以有效,是因为

如果省略主机名,则psql将通过Unix域套接字连接到本地主机上的服务器,或者通过TCP / IP连接到没有Unix域套接字的计算机上的localhost。

您的操作系统支持Unix域套接字,但是PostgreSQL的Unix套接字可以 psql不存在或位于与预期位置不同的位置。

明确指定主机名作为localhost强制psql使用TCP / IP。设置环境变量PGHOST是实现该目标的方法之一。在psql的手册中有记录


37
对于任何使用Rails应用程序遇到此问题的人:您可以在database.yml中指定主机。
dwhalen

12
这是什么魔法?我的意思是,认真。你能解释一下吗?
Sreejith Ramakrishnan

1
我总是回到这个答案!再次拯救了我的生命。该代码段确实属于此页面postgresapp.com/documentation/cli-tools.html
sambecker

1
我不为什么,但是对我有用!当我使用'rails db:create'时,我在Rails 5中遇到了这个问题,但是我已经host: localhost在database.yml中设置了。@dwhalen
Spark.Bao

1
database.yml在将Postgres降级为较旧的Homebrew托管版本后出现此错误时,此方法无需修改即可在Rails 5.2中工作。
SexxLuthor'1

37

尝试在控制台中粘贴:

$ mkdir /var/pgsql_socket/ 

$ ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/

最后,我得到了这个答案。
Abs

好。即使我认为我知道这为何有效,也需要多做一些解释。此解决方案比公认的答案更好,只是缺少详细信息。
Glutexo

23

我可以通过简单地为PostgreSQL主机地址填写127.0.0.1而不是将其保留为空来解决。(Django示例)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'database_name',
        'USER': 'database_user',
        'PASSWORD': 'pass',
        'HOST': '127.0.0.1',
        'PORT': '',
        }
}

1
我现在有点傻,我已经尝试解决此问题大约2天了。在Windows上,我使用的是“ 127.0.0.1”,但是后来我将代码移至生产环境(Debian 7),不得不将其更改为“”。他们给出了这样的错误消息,使人们认为问题可能出在其他地方,这很奇怪。
fang_dejavu 2014年

10

在您喜欢的编辑器中打开“ postgresql.conf”。查找变量“ unix_socket_directories”,它很可能看起来像这样:

unix_socket_directories = '/private/tmp/'

将行更改为此:

unix_socket_directories = '/var/pgsql_socket/'

请注意,如果要将套接字文件放在多个目录中,请以逗号分隔。


这具有尝试在其他位置创建套接字的预期效果,但是服务器无法启动,因为它没有在/ var目录中创建文件的权限。我最终在较高的级别上更改了配置文件,以仅使用最初使用的套接字。几乎与此答案stackoverflow.com/a/29511357/1535177中给出的一样
Eosis


7

正如其他人在评论中提到的那样,解决此问题的一个非常简单的解决方案是在数据库配置中声明数据库“主机”。添加此答案只是为了使阅读本书的人更加清楚。

例如,在Ruby on Rails应用程序中,编辑/config/database.yml:

development:
  adapter: postgresql
  encoding: unicode
  database: database_name
  pool: 5
  host: localhost

注意:添加的最后一行用于指定主机。在更新到优胜美地之前,我从未需要以这种方式指定主机。

希望这对某人有帮助。

干杯


我需要将主机设置为找到包含.s.PGSQL.5432文件的目录。
Eosis


4

您可以检查您的postgresql.conf文件吗?

您的postgres在哪个端口上运行?

我认为它没有在5432端口上运行,如果不更改为5432

或在终端使用时

psql -U  postgres -p YOUR_PORT_NUMBER database_name

1
我无法运行终端命令。我犯了同样的错误。我需要在哪里可以找到postgresql.conf文件的帮助。运行Lion Server时,我曾经有一个/ var / pgsql文件夹。我想那已经不复存在了。我刚刚发布了ps grep命令的输出。我打开了Wiki服务以运行PostgreSQL。有人告诉我可以使用sudo serveradmin命令,而无需打开任何Server应用程序服务,但是它们不起作用。我现在以root用户身份登录,因此我应该可以执行任何操作:)我在Network Utility中检查了端口。5432未使用。
Pamela Cook-LightBe Corp 2012年


2

我这样做是为了:

dpkg-reconfigure locales

然后选择您喜欢的语言环境

pg_createcluster 9.5 main --start

(9.5是我的Postgresql版本)

/etc/init.d/postgresql start

再说吧!

sudo su - postgres
psql


1
apt-get install postgres-xc-client
apt-get install postgres-xc

1
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket"/var/pgsql_socket/.s.PGSQL.5432"?

我不断遇到上述错误,但以上解决方案均不适合我。最后,以下解决方案在Mac OS X上解决了我的问题

使用brew安装postgres

brew install postgres

安装冲泡服务

brew tap homebrew/services

将Postgres作为后台服务启动

brew services start postgresql

手动停止postgres

brew services stop postgresql

我们还可以使用brew服务重启Postgres

brew services restart postgresql

1

使用以下代码检查postgres服务器是否正在运行

sudo service postgresql status

如果postgres服务器处于非活动状态,请编写以下命令。

sudo service postgresql start

1

我的计算机冻结并自行重新启动后,出现此错误。在此页面上找不到我的解决方案,而是在另一个具有相同错误psql的非常受好评的 SO问题上找不到:无法连接到服务器:没有这样的文件或目录(Mac OS X)。答案:只需删除此文件/usr/local/var/postgres/postmaster.pid,然后brew services restart postgresql就可以了。在执行此操作之前,请注意有关链接的答案的警告,有关该信息会杀死postgres进程,否则可能会永久损坏您的数据库。


1

对于RubyOnRails应用程序,localhost 如果使用自定义Postgresql版本,请添加

# config/database.yml
default: &default
  host: localhost

0

文件权限对Mac OS拥有的Postgres数据库有限制。在重启或重新启动Postgres之后,将重置这些权限:例如,serveradmin start postgres。

因此,暂时重置权限或所有权:

sudo chmod o+rwx /var/pgsql_socket/.s.PGSQL.5432
sudo chown "webUser"  /var/pgsql_socket/.s.PGSQL.5432

权限重置不安全,因此请安装解决方案拥有的数据库版本。


0

我花了一些时间,但在仔细阅读了所提供的建议并完成了其他网络搜索之后,我终于能够使它正常工作。我使用了Mactasia制作的以下YouTube视频中的信息:

http://www.youtube.com/watch?v=y1c7WFMMkZ4

当我这样做时,我看到了以.lock为扩展名的文件。但是,当我继续使用PostgreSQL处理Rails应用程序时,尝试启动Rails Server时仍然出现错误。这次我收到一个权限被拒绝的错误。这是我记得不仅要更改plist中的listen_addresses,而且还必须将unit_socket_permissions更改为0777的时候。我还以root用户身份登录,以更改var / pgsql_socket文件夹中的权限,在该文件夹中可以访问该文件夹。用户级别。Postgres现在工作正常。我正在从SQL备份中重新加载数据。

我不明白的是,当我执行sudo serveradmin fullstatus postgres时,当我打开Wiki的PostgreSQL时,据说可以正常工作,但是仍然出现错误。那好吧。



0

首先删除已安装的postgres:

sudo apt-get purge postgr*
sudo apt-get autoremove

然后安装“ synaptic”:

sudo apt-get install synaptic
sudo apt-get update

然后安装Postgres

sudo apt-get install postgresql postgresql-contrib
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.