关于postgresql:Socket文件“/var/pgsql_socket/.s.PGSQL.5432”在Mountain Lion中丢失(OS X Server)

Socket File “/var/pgsql_socket/.s.PGSQL.5432” Missing In Mountain Lion (OS X Server)

我刚刚使用OS X Server将我的MacMini服务器从Lion Server升级到Mountain Lion。我在去年第一次安装Lion Server时遇到了与PostgreSQL相同的问题。

当我尝试做任何类型的PostgreSQL终端命令时,我得到了许多多年来得到的以下臭名昭着的错误消息:

1
2
3
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 Support(没有协议),我被告知我的问题必须由开发人员解决,这将投入695美元。

我现在有一个网站,因为我无法重建它。此时我不知道在哪里寻求帮助。我会继续在线查看我是否能找到一些东西。但是我希望有人可以快速给我一个答案,这样我就可以重建我的数据库了。

更新:12/13/2012 15:33 GMT-6

这是ps auwwx | grep postg的输出:

1
2
3
4
5
6
7
8
_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

更新:12/13/2012 18:10 GMT-6

经过激烈的网络搜索,发现了这个视频。我能够使PostgreSQL工作并删除错误。我可以使用pgadmin和phppgadmin连接。由于纯粹的挫败感,我正要回到Lion Server。现在我不必。


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

1
export PGHOST=localhost

这是因为:

If you omit the host name, psql will connect via a Unix-domain socket to a server on the local host, or via TCP/IP to localhost on machines that don't have Unix-domain sockets.

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

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


尝试在控制台中粘贴:

1
2
3
$ mkdir /var/pgsql_socket/

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


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

1
2
3
4
5
6
7
8
9
10
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'database_name',
        'USER': 'database_user',
        'PASSWORD': 'pass',
        'HOST': '127.0.0.1',
        'PORT': '',
        }
}


在你最喜欢的编辑器中打开'postgresql.conf'。查找变量'unix_socket_directories',它很可能如下所示:

1
unix_socket_directories = '/private/tmp/'

将行更改为:

1
unix_socket_directories = '/var/pgsql_socket/'

请注意,如果您希望多个目录中的套接字文件使用逗号分隔它们。


正如其他人在评论中所提到的,这个问题的一个非常简单的解决方案是在数据库配置中声明数据库"host"。添加此答案只是为了让读者更清楚一点。

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

1
2
3
4
5
6
development:
  adapter: postgresql
  encoding: unicode
  DATABASE: database_name
  pool: 5
  host: localhost

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

希望这有助于某人。

干杯


一个更简单的解决方案(感谢http://daniel.fone.net.nz/blog/2014/12/01/fixing-connection-errors-after-upgrading-postgres/)。我升级到postgres 9.4。就我而言,我需要做的就是(经过一天的谷歌搜索而没有成功)

1
2
3
gem uninstall pg
gem uninstall activerecord-postgresql-adapter
bundle install

重启webrick,完成了!


检查数据库的状态:

1
service postgresql STATUS

如果数据库未运行,请启动db:

1
sudo service postgresql START


你能检查一下postgresql.conf文件吗?

你的postgres在哪个端口运行?

我认为它没有在5432端口上运行。如果没有将其更改为5432

或终端使用

1
psql -U  postgres -p YOUR_PORT_NUMBER database_name


我通过这样做:

1
dpkg-reconfigure locales

并选择您喜欢的区域设置

1
pg_createcluster 9.5 main --start

(9.5是我的postgresql版本)

1
/etc/init.d/postgresql START

然后它说出来!

1
2
sudo su - postgres
psql

我和Django有这个问题。

通过明确将主机名设置为"localhost"来修复它。


1
2
apt-GET install postgres-xc-client
apt-GET install postgres-xc


1
2
3
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

1
brew install postgres

安装brew服务

1
brew tap homebrew/services

将postgres作为后台服务启动

1
brew services START postgresql

手动停止postgres

1
brew services stop postgresql

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

1
brew services restart postgresql

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

1
sudo service postgresql STATUS

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

1
sudo service postgresql START

如果您遇到上述问题,但已从Yosemite升级,则需要采用不同的方法,因为升级解决方案可能会破坏某些文件。安装最新版本的OS X(Yosemite或El Capitan)后,更多细节缺少`pg_tblspc`。


首先删除已安装的postgres:

1
2
sudo apt-GET purge postgr*
sudo apt-GET autoremove

然后安装'synaptic':

1
2
sudo apt-GET install synaptic
sudo apt-GET UPDATE

然后安装Postgres

1
sudo apt-GET install postgresql postgresql-contrib

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


文件权限对Mac OS拥有的Postgres数据库具有限制性。重新启动或重新启动Postgres后会重置这些权限:例如serveradmin开始postgres。

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

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

权限重置不安全,因此请安装您为解决方案拥有的db版本。


我刚刚创建了一个新的集群,对我有用,我正在使用(PostgreSQL)9.3.20:

1
sudo pg_createcluster 9.3 main --start

我花了一段时间,但在完成提供的建议和其他网络搜索后,我终于能够完成这项工作。我使用了Mactasia创建的以下YouTube视频中的信息:

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

我不明白的是,当我打开wiki时,PostgreSQL据说可以在我做sudo serveradmin fullstatus postgres时工作,但我仍然得到了错误。那好吧。