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域套接字,但
明确指定主机名为
尝试在控制台中粘贴:
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)。答案:只需删除此文件
文件权限对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时工作,但我仍然得到了错误。那好吧。