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

时间:2012-12-13 21:25:17

标签: postgresql osx-mountain-lion postgresql-9.2 osx-server

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

当我尝试执行任何类型的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 Support(没有协议),我被告知我的问题必须由开发人员解决,这将花费695美元。

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

更新时间:12/13/2012 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 

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

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

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

20 个答案:

答案 0 :(得分:281)

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

export PGHOST=localhost

这有效because

  

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

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

明确指定主机名为localhost强制psql使用TCP / IP。设置环境变量PGHOST是实现这一目标的方法之一。它记录在psql's manual

答案 1 :(得分:31)

尝试在控制台粘贴:

$ mkdir /var/pgsql_socket/ 

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

答案 2 :(得分:23)

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

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

答案 3 :(得分:10)

打开' postgresql.conf'在你最喜欢的编辑器。寻找变量' unix_socket_directories',它很可能看起来像这样:

unix_socket_directories = '/private/tmp/'

将行更改为:

unix_socket_directories = '/var/pgsql_socket/'

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

答案 4 :(得分:7)

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

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

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

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

希望这有助于某人。

干杯

答案 5 :(得分:5)

检查数据库的状态:

service postgresql status

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

sudo service postgresql start

答案 6 :(得分:5)

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

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char* argv[])
{
    printf("Hello world\n");
// read an image
Mat imgInput = imread("a.png");
// create image window named "My Image"
namedWindow("My Image");

// Convert to gray if necessary
if (imgInput.channels() == 3)
    cv::cvtColor(imgInput, imgInput, CV_BGR2GRAY);

// Apply Canny edge detector
Mat imgContours;
double thresh = 105; // try different values to see effect
Canny(imgInput, imgContours, 0.4*thresh, thresh); // low, high threshold


// show the image on window
imshow("My Image", imgInput);
// wait for xx ms (0 means wait until keypress)
waitKey(5000);
return 0;
}

重启webrick,完成!

答案 7 :(得分:4)

你能查看postgresql.conf文件吗?

你的postgres正在运行什么端口?

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

终端使用时的OR

psql -U  postgres -p YOUR_PORT_NUMBER database_name

答案 8 :(得分:2)

我和Django有这个问题。

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

答案 9 :(得分:2)

我通过这样做来实现:

dpkg-reconfigure locales

并选择您喜欢的区域设置

pg_createcluster 9.5 main --start

(9.5是我的postgresql版本)

/etc/init.d/postgresql start

然后它说出来了!

sudo su - postgres
psql

答案 10 :(得分:1)

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

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

答案 11 :(得分:1)

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

sudo service postgresql status

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

sudo service postgresql start

答案 12 :(得分: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服务

brew tap homebrew/services

将postgres作为后台服务启动

brew services start postgresql

手动停止postgres

brew services stop postgresql

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

brew services restart postgresql

答案 13 :(得分:1)

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

答案 14 :(得分:1)

如果您遇到上述问题,但已从Yosemite升级,则需要采用不同的方法,因为升级解决方案可能会破坏某些文件。更多详情请见`pg_tblspc` missing after installation of latest version of OS X (Yosemite or El Capitan)

答案 15 :(得分: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

答案 16 :(得分:0)

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

sudo pg_createcluster 9.3 main --start

答案 17 :(得分: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

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

答案 18 :(得分:0)

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

答案 19 :(得分:0)

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

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

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

我不明白的是,当我打开维基时,当我做了一个sudo serveradmin fullstatus postgres时,据说PostgreSQL正在工作,但我仍然得到了错误。哦,好吧。