无法连接到本地 PostgreSQL

我已经设法摆脱了当地的发展环境。

All my local Rails apps are now giving the error:

PGError
could not connect to server: Permission denied
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

我不知道是什么引起的。

在寻找解决方案的过程中,我更新了所有捆绑的宝贝,更新了系统宝贝,更新了 MacPorts。

Others have reported this issue when upgrading from OSX Leopard to Lion, due to confusion over which version of Postgres should be used (i.e., OSX version or MacPorts version). I've been running Lion for several months, so it seems strange that this should happen now.

I'm reluctant to mess around too much without first understanding what the problem is. How can I debug this methodically?

如何确定系统上有多少个 PostgreSQL 版本、正在访问哪个版本以及它的位置?如果使用了错误的 PostgreSQL,我该如何修复这个问题?

很抱歉问了一些新手的问题。我还在学习如何使用它! 谢谢你的指点。

剪辑

根据以下建议和意见更新了一些内容。

我尝试运行返回 command not found错误的 pg_lsclusters

然后,我尝试对 pg _ hba. conf 文件进行本地化,找到了以下三个示例文件:

/opt/local/share/postgresql84/pg_hba.conf.sample
/opt/local/var/macports/software/postgresql84/8.4.7_0/opt/local/share/postgresql84/pg_hba.conf.sample
/usr/share/postgresql/pg_hba.conf.sample

So I assume 3 versions of PSQL are installed? Macports, OSX default and ???.

然后,我搜索返回的 launchctl 启动脚本 ps -ef | grep postgres

0    56     1   0 11:41AM ??         0:00.02 /opt/local/bin/daemondo --label=postgresql84-server --start-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper start ; --stop-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper stop ; --restart-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper restart ; --pid=none
500   372     1   0 11:42AM ??         0:00.17 /opt/local/lib/postgresql84/bin/postgres -D /opt/local/var/db/postgresql84/defaultdb
500   766   372   0 11:43AM ??         0:00.37 postgres: writer process
500   767   372   0 11:43AM ??         0:00.24 postgres: wal writer process
500   768   372   0 11:43AM ??         0:00.16 postgres: autovacuum launcher process
500   769   372   0 11:43AM ??         0:00.08 postgres: stats collector process
501  4497  1016   0 12:36PM ttys000    0:00.00 grep postgres

我已经在 http://pastebin.com/Gj5TpP62上发布了 postgreql84-server. wrapper 的内容。

我尝试运行 port load postgresql184-server,但收到一个错误 Error: Port postgresql184-server not found

我仍然很困惑如何解决这个问题,并欣赏任何“傻瓜”的指导。

谢谢!

编辑2

这个问题开始后,我有一些问题与 daemondo。我的本地 Rails 应用程序崩溃了,出现了类似“ daemondogem 找不到”这样的应用程序错误。然后,我进行了一系列捆绑包更新、 gem 更新、端口更新和 brew 更新,试图找到问题所在。

这个错误会是 daemondo 的问题吗?

125088 次浏览

这看起来像是一个文件权限错误。Unix 域套接字是文件,和其他文件一样具有用户权限。似乎试图访问数据库的 OSX 用户没有访问套接字文件的文件权限。为了证实这一点,我在 Ubuntu 和 psql 上做了一些测试,试图生成相同的错误(包括下面)。

您需要检查套接字文件及其目录 /var/var/pgsql_socket的权限。您的 Rails 应用程序(OSX 用户)必须对这些目录具有执行(x)权限(最好授予所有人权限) ,套接字应该具有完全权限(wrx)。您可以使用 ls -lAd <file>来检查这些,如果它们中的任何一个是符号链接,那么您需要检查文件或将链接指向。

您可以为自己更改目录的权限,但套接字是通过 postgresql.conf中的 postgres 配置的。这可以在与 pg_hba.conf相同的目录中找到(您必须找出是哪个目录)。一旦您设置了权限,您将需要重新启动 postgreql。

# postgresql.conf should contain...
unix_socket_directory = '/var/run/postgresql'       # dont worry if yours is different
#unix_socket_group = ''                             # default is fine here
#unix_socket_permissions = 0777                     # check this one and uncomment if necessary.

编辑:

我在谷歌上做了一个快速搜索,你可能希望看看它是否相关。 This might well result in any attempt to find your config file failing.

Http://www.postgresqlformac.com/server/howto_edit_postgresql_confi.html


错误信息:

在 pg _ hba. conf 中找不到用户

psql: FATAL:  no pg_hba.conf entry for host "[local]", user "couling", database "main", SSL off

用户密码验证失败:

psql: FATAL:  password authentication failed for user "couling"

Missing unix socket file:

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

Unix 套接字存在,但服务器没有监听它。

psql: could not connect to server: Connection refused
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Unix 套接字文件的错误文件权限 :

psql: could not connect to server: Permission denied
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

我的直觉告诉我这又是一个 mac/OSX 的东西: 前端和后端为 unix 域套接字假设了不同的位置(作为一个 集合地点点)。

清单:

  • Postgres 正在运行: ps aux | grep postgres | grep -v grep应该可以做到这一点
  • 套接字位于哪里: find / -name .s.PGSQL.5432 -ls(套接字过去位于/tmp 中; 您可以从那里开始查找)
  • 即使您找到了(unix 域)套接字,客户端也可以使用不同的位置。(如果您混合使用发行版,或者您在某个地方安装了一个发行版,并在其他地方安装了另一个(例如来自源) ,则会发生这种情况) ,客户机和服务器使用不同的 约会地址。

如果 postgres 正在运行,并且套接字确实存在,您可以使用:

  • psql -h /the/directory/where/the/socket/was/found mydbname

(它尝试连接到 unix 域套接字)

; 现在应该得到 psql 提示符: 尝试 \d,然后 \q退出 尝试:

  • psql -h localhost mydbname.

(它尝试连接到 localhost (127.0.0.1)

如果这些尝试由于授权不足而失败,您可以更改 pg _ hba。在这种情况下,还要检查日志。

一个类似的问题: 不能让 Postgres 开始

注意: 如果您可以访问 psql 提示符,那么这个问题的快速修复方法就是更改 config/database.yml,添加:

host: localhost

或者你可以试着加上:

host: /the/directory/where/the/socket/was/found

对我来说,是 host: /tmp

Try uninstalling the pg gem (gem uninstall pg) then reinstalling -- if you use bundler, then bundle install, else gem install pg. Also, make sure path picks up the right version: Lion has a version of posgresql (prior versions didn't) and it may be in the path before your locally installed version (e.g. MacPorts, homebrew).

在我的例子中: 自制安装 postgreql,更新 postgreql,Rails 等,然后得到这个错误。卸载和重新安装 pg gem 为我做到了这一点。

我是 MacOSX。在使用自制程序将 postresql 安装从 pre-9.1升级到9.1.2之后,我遇到了同样的问题。(顺便说一下,记住在用 pg _ dump 升级之前转储数据库,9.1之前的数据库是不兼容的。)同样的问题,同样的错误消息。

卸载的 pg 宝石为我做了技巧。事实上我跳了不少舞才发现这个问题。首先,我做了一个全局的宝石卸载,清除甲板上所有的旧宝石(有一些)。然后我从我的 Gemfile 删除 pg,重新绑定,恢复 pg 引用,并再次反弹。

在那之后,就像施了魔法一样。

This is how I solved that error message, based partly on wildplasser's answer.

find / -name .s.PGSQL.5432 -ls 2> /dev/null
=> ... /tmp/.s.PGSQL.5432

So, there's my socket or whatever, but the client looks for it at:

/var/run/postgresql/.s.PGSQL.5432

因此,很简单地做一个到 /tmp/.s.PGSQL.5432的符号链接:

sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

希望这对任何人都有帮助。这似乎有点错误,但嘿,它的工作!

套接字文件的位置在编译时被内置到 gem 中。因此,您需要重新构建您的 pg gem。

gem pristine pg
# or
bundle exec gem pristine pg

这应该能解决这个问题。

what resolved this error for me was deleting a file called postmaster.pid in the postgres directory. please see my question/answer using the following link for step by step instructions. my issue was not related to file permissions:

无法连接到服务器: 没有这样的文件或目录(MacOSX)

不过,回答这个问题的人失去了很多机会,谢谢! 我尽我所能地投了赞成票

如果你遇到类似的错误:

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

这可能会奏效(对我来说奏效了) :

initdb /usr/local/var/postgres -E utf8

如果不使用 OSX/Brew,则指定的目录应该是不同的。

注意: 这不是上面看到的精确错误消息,但是这个线程是该错误消息的第一个结果。

只是确认一下我在 PSQL 和 Django 上也遇到过类似的问题,

看起来像是因为我的 psql 服务器没有正确关闭,而 postmaster. pid 文件仍然在 postgres 文件夹中(在正确关闭时应该自动删除)。

删了这个,一切正常

我在使用 postgreql 和 Rail 时也遇到了类似的问题。更新我的 Gemfile 使用新版本的 gem pg 为我解决了这个问题。(gem pg version 0.16.0 works).在 Gemfile 中使用:

gem 'pg', '0.16.0'

然后运行以下命令更新 gem

bundle install --without production
bundle update
bundle install

Hello world:)
The best but strange way for me was to do next things. < br >
1) 下载 Postpres93.app或其他版本。

2) 添加一行(命令)到文件 .bash_profile(在我的主目录中) :

export PATH=/Applications/Postgres93.app/Contents/MacOS/bin/:$PATH
It's a PATH to psql from Postgres93.app. The row (command) runs every time console is started.

3) Launch Postgres93.app from /Applications/ folder. It starts a local server (port is "5432" and host is "localhost").

4) After all of this manipulations I was glad to run $ createuser -SRDP user_name and other commands and to see that it worked! Postgres93.app can be made to run every time your system starts.

5) Also if you wanna see your databases graphically you should install PG Commander.app. It's good way to see your postgres DB as pretty data-tables

Of, course, it's helpful only for local server. I will be glad if this instructions help others who has faced with this problem.

今天我的苹果笔记本电池没电了,就发生了这种事。我认为这可能是由于关机不当造成的。你要做的就是删除 postmaster. pid

导航到文件夹

cd /usr/local/var/postgres

检查 postmaster. pid 是否存在

ls

删除邮局局长

rm postmaster.pid
gem uninstall pg

在 OSX 操作系统上使用自制程序:

gem install pg -- --with-pg-config=/usr/local/bin/pg_config

在我的情况下,以前的解决方案没有一个是好的。您可以在 Rails 配置文件中使用 TCP host + port号码,而不是使用套接字。因此,在 database.yml文件中,只需像这样添加两行:

...
adapter: postgresql
encoding: unicode
pool: 5
host: localhost
port: 5432

这解决了我的问题:)

Before I used this fix:

sudo mkdir /var/run/postgresql
sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

但是每次重启后,/tmp/.s.PGSQL.5432都被删除,我必须重复这些命令。解决方案是可行的,但是很糟糕,所以最好修改 Rails 数据库配置文件:)

当我使用 Django 创建 Posgtres 时出现了这个错误,我使用的是 Back Track,它安装了 Postgres。我想问题出在设置上。我修复了它完全删除,然后像这样重新安装。

sudo apt-get remove postgresql
sudo apt-get purge postgresql

快跑:

apt-get --purge remove postgresql\*

仅仅清除 postgreSQL 包是不够的,因为它只是一个空的元包。

删除所有 PostgreSQL 包后,运行:

rm -r /etc/postgresql/
rm -r /etc/postgresql-common/
rm -r /var/lib/postgresql/
userdel -r postgres
groupdel postgres

你现在应该能够:

apt-get install postgresql

升级到新的 postgres 后我开始得到这个-我没有意识到我有保存数据文件。

First I tried to start the postgres server:

postgres -D /usr/local/var/postgres

我就是这样看到这个错误的

FATAL:  database files are incompatible with server
DETAIL:  The data directory was initialized by PostgreSQL version 9.0, which is not compatible with this version 9.3.5.

然后我发现这个答案与一个不兼容错误有关: https://serverfault.com/questions/342626/how-do-i-upgrade-postgresl-database-incompatibility-error

这就是解决问题的方法

mv /usr/local/var/postgres /usr/local/var/postgres.old
initdb -D /usr/local/var/postgres

这个问题一直困扰着我,在进一步的调查(运行 rake db:setup)中,我发现 ails 试图连接到一个以前使用过的 postgres 实例——一个以 DATABASE _ URL 的形式存储在 env 变量中的实例。

解决方案: unset DATABASE_URL

来源: https://stackoverflow.com/a/17420624/2577622

我得到了同样的错误(原来是 postmaster.pid的错误。下面是我如何得到后画重新运行(都归功于 Ricardo Burillo) :

$ rm /usr/local/var/postgres/postmaster.pid
$ pg_resetxlog -f /usr/local/var/postgres

我尝试了大多数解决这个问题的方法,但是没有一个奏效。

我运行了 lsof -P | grep ':5432' | awk '{print $2}',它显示了正在运行的进程的 PID。但是我不能用 kill -9 <pid>杀死它。

当我运行 pkill postgresql时,这个过程终于停止了。希望这能有所帮助。

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

我寻找了一段时间的解决方案,所以,这个解决方案也为我解决了这个问题(reitdb) :

rm -r /usr/local/var/postgres
initdb /usr/local/var/postgres -E utf8
pg_ctl -D /usr/local/var/postgres -l logfile start

我用的是 OS X 10.11.3和 Brew。

我读了很多关于这个错误的主题,对我来说,解决方案是简单地重新启动 postgres:

sudo service postgresql restart

这里没有提到。