97

我刚刚使用 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。我不知道,但这似乎不是一个合理的选择,因为服务器应用程序上的几个选项使用 PostgreSQL。我联系了 Apple 企业支持(未达成协议),并被告知我的问题必须由开发人员解决,费用为 695 美元。

我有一个网站现在关闭了,因为我无法重建它。在这一点上,我不知道在哪里寻求帮助。我会继续上网看看能不能找到什么。但是我希望有人可以快速给我一个答案,以便我可以重建我的数据库。

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

这是我对 ps auwx|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

4

20 回答 20

304

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

export PGHOST=localhost

这有效,因为

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

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

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

于 2013-04-25T00:23:34.653 回答
39

尝试在控制台中粘贴:

$ mkdir /var/pgsql_socket/ 

$ ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/
于 2014-08-14T16:19:58.437 回答
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': '',
        }
}
于 2013-09-06T06:08:46.780 回答
10

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

unix_socket_directories = '/private/tmp/'

将行更改为:

unix_socket_directories = '/var/pgsql_socket/'

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

于 2014-10-09T09:54:56.697 回答
9

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

gem uninstall pg
gem uninstall activerecord-postgresql-adapter
bundle install

重启webrick,大功告成!

于 2015-08-13T03:01:46.563 回答
7

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

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

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

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

希望这可以帮助某人。

干杯

于 2015-04-08T09:51:45.870 回答
5

检查数据库的状态:

service postgresql status

如果数据库没有运行,启动数据库:

sudo service postgresql start
于 2017-02-23T07:29:36.150 回答
4

你能检查你的 postgresql.conf 文件吗?

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

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

或在终端使用

psql -U  postgres -p YOUR_PORT_NUMBER database_name
于 2012-12-13T21:29:24.633 回答
2

我对 Django 有这个问题。

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

于 2013-10-06T16:04:26.800 回答
2

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

# config/database.yml
default: &default
  host: localhost
于 2020-03-27T09:17:49.477 回答
2

我这样做是为了:

dpkg-reconfigure locales

并选择您喜欢的语言环境

pg_createcluster 9.5 main --start

(9.5 是我的 postgresql 版本)

/etc/init.d/postgresql start

然后它字!

sudo su - postgres
psql
于 2016-09-13T09:10:01.423 回答
1

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

于 2014-11-11T19:41:59.503 回答
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 services 来重启 Postgres

brew services restart postgresql
于 2017-01-23T12:27:29.577 回答
1

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

sudo service postgresql status

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

sudo service postgresql start
于 2018-09-07T06:36:35.390 回答
1
apt-get install postgres-xc-client
apt-get install postgres-xc
于 2015-08-18T09:32:50.987 回答
1

首先删除已安装的 postgres:

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

然后安装“突触”:

sudo apt-get install synaptic
sudo apt-get update

然后安装 Postgres

sudo apt-get install postgresql postgresql-contrib
于 2016-06-03T09:23:03.433 回答
1

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

于 2019-05-15T05:03:05.477 回答
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 备份中重新加载我的数据。

我不明白的是,当我打开 wiki 时,PostgreSQL 应该在我执行 sudo serveradmin fullstatus postgres 时工作,但我仍然收到错误。那好吧。

于 2012-12-14T12:15:18.400 回答
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

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

于 2014-10-14T17:38:20.910 回答
0

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

sudo pg_createcluster 9.3 main --start
于 2017-12-04T21:47:25.593 回答