[英]PostgreSQL error 'Could not connect to server: No such file or directory'
像其他一些人一样,当我在我的项目中运行 rake db:migrate 或什至为我的Ruby on Rails 3.2 应用程序尝试大多数数据库任务时,我遇到了这个错误。
PGError(无法连接到服务器:没有这样的文件或目录。服务器是否在本地运行并接受 Unix 域套接字“/tmp/.s.PGSQL.5432”上的连接?
很久以前我用Homebrew安装了PostgreSQL ,最近尝试安装MongoDB之后,我的 PostgreSQL 安装从未如此。 我正在运行 OS X v10.6 Snow Leopard。
出了什么问题,我如何更好地了解 PostgreSQL 是如何以及应该在我的 Mac 上设置的?
到目前为止(我认为)这告诉我 PostgreSQL 没有运行(?)。
ps -aef|grep postgres (ruby-1.9.2-p320@jct-ana) (develop) ✗
501 17604 11329 0 0:00.00 ttys001 0:00.00 grep postgres
但这是否告诉我 PostgreSQL 正在运行?
✪ launchctl load -w /usr/local/Cellar/postgresql/9.1.4/homebrew.mxcl.postgresql.plist (ruby-1.9.2-p136)
homebrew.mxcl.postgresql: Already loaded
我该如何解决? 我没看到什么?
PS: ~/Library/LaunchAgents
包含两个 PostgreSQL .plist 文件。 我不确定这是否相关。
org.postgresql.postgres.plist
homebrew.mxcl.postgresql.plist
我尝试了以下并得到如下结果。
$ psql -p 5432 -h 本地主机
psql: could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Connection refused
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Connection refused
Is the server running on host "localhost" (fe80::1) and accepting
TCP/IP connections on port 5432?
因为 OS X 安装了它自己的 PostgreSQL 版本,而 Homebrew 在不同的地方安装了不同的版本,并且 PostgreSQL 命令在 /tmp/ 目录中查找,所以我已经阅读过。 您需要在 Stack Overflow 上进行更多搜索,但基本上您对 PostgreSQL 进行符号链接,以便在该 tmp 路径中查找的任何内容实际上都能找到真正的路径,如果这有意义的话。
这是我发现更多尝试的链接,特别是按照上面的符号链接, Mac OSX Lion Postgres 不接受 /tmp/.s.PGSQL.5432 上的连接。 我仍然希望有人能对在 OS X 上安装 PostgreSQL 背后的概念以及为什么这一切如此困难做出一个体面的解释。
帮助排除故障的最新见解:
$ which psql // This tells you which PostgreSQL you are using when you run $ psql.
然后运行:
$ echo $PATH
要考虑的关键是:
确保要运行的 PostgreSQL 副本的路径条目位于 OS X 系统的 PostgreSQL 路径之前。
这是一个核心要求,它决定了运行哪个 PostgreSQL,据我所知,这会导致大多数这些问题。
检查您的 postgres 目录中是否没有 postmaster.pid,可能是/usr/local/var/postgres/
删除它并启动服务器。
检查 - https://github.com/mperham/lunchy是一个很好的 launchctl 包装器。
对我来说,这行得通
rm /usr/local/var/postgres/postmaster.pid
如果您在 OS X 上,“ Postgres.app ”是一个更好的解决方案
这是修复:
cd /var
sudo rm -r pgsql_socket
sudo ln -s /tmp pgsql_socket
chown _postgres:_postgres pgsql_socket
更多信息可在“ postgresql 9.0.3. on Lion Dev Preview 1 ”中找到。
对于您提到的错误,这对我有用。 执行以下操作之一:
如果您在安装时使用了默认端口5432
以外的其他端口,则可以更改您在postgres.conf
文件中指定的默认端口。
更改postgresql.conf
中的端口号并重新启动数据库服务器。
代替psql
输入完整的命令:
psql -p 5432 -h localhost
如果您正在运行 Homebrew,请卸载 Postgresql end pg gem:*
$ gem uninstall pg
$ brew uninstall postgresql
下载并运行以下脚本以修复 /usr/local 上的权限:* https://gist.github.com/rpavlik/768518
$ ruby fix_homebrew.rb
然后再次安装 Postgres 和 pg gem:*
$ brew install postgresql
$ initdb /usr/local/var/postgres -E utf8
要在登录时启动 postgresql,请运行:
$ ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
或者手动启动。
安装 pg gem
$ gem install pg
我希望有帮助
我通过升级 postgres 解决了这个问题。
brew update
brew upgrade
然后我还必须升级数据库以兼容新的主要版本,因为我从 10 升级到了 11。
brew postgresql-upgrade-database
(来源https://github.com/facebook/react-native/issues/18760#issuecomment-410533581 )
当我将 Postgres 升级到 9.3.x 时,我遇到了这个问题。 对我来说,快速解决方法是降级到我之前拥有的任何 9.2.x 版本(无需安装新版本)。
$ ls /usr/local/Cellar/postgresql/
9.2.4
9.3.2
$ brew switch postgresql 9.2.4
$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
<open a new Terminal tab or window to reload>
$ psql
“ Homebrew install specific version of formula? ” 提供了更全面的解释以及解决问题的替代方法。
我在使用自制软件在 Mac 10.15.5 上运行时遇到了这个错误,这似乎是一个更新的解决方案,适用于上述解决方案。
有一个名为 postmaster.pid 的文件应该在 postresql 退出时自动删除。
如果它不执行以下操作
所以对于这里的很多问题,似乎人们已经在运行 psql 并且不得不删除postmaster.pid
。 但是,我没有这个问题,因为我什至从来没有在我的系统中正确安装过 postgres。
这是一个在 MAC OSX Yosemite 中对我有用的解决方案
export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin
希望这可以帮助! 面条!
此外,这个答案对我帮助最大: https ://stackoverflow.com/a/21503349/3173748
当您运行: psql -p 5432 -h localhost 它不使用环回驱动程序,而是使用真正的套接字,因此您需要配置 postgres 以接受套接字连接。 因此,即使 pgadmin 和其他客户端可以工作,psql 也不会。
您需要同时更改 postgresql.conf 文件和 pg_hba.conf 文件,以便允许通过真实套接字进行连接。 这也将允许从远程 IP 连接,这就是默认禁用它的原因。
这些文件位于数据目录中,但实际位置可能会有所不同,具体取决于 postgres 的安装方式。 运行 postgres 后,运行以下命令:
ps -ef | grep postmaster
这两个文件是-D目录(可能是/usr/local/pgsql/data)。
对于 postgresql.conf 文件,取消注释 listen_address 并将其更改为:
listen_address = '*'
对于 pg_hba.conf 添加以下行:
host all all 0.0.0.0/0 md5
我不太了解 Mac 或 Homebrew,但我非常了解 PostgreSQL。
您想弄清楚试图启动 PostgreSQL 的日志在哪里,以及 PostgreSQL 的套接字目录是什么。 默认情况下,当你构建 PG 时,socket 目录是 /tmp/。 如果您在构建 PG 并启动 PG 时没有更改它,那么您应该能够在 /tmp 中看到一个套接字文件:ls -al /tmp
套接字文件以“.”开头,因此您不会看到它带有 ls 的“-a”。
如果您在那里看不到套接字,并且您在 ps awux | 中看不到任何东西 grep postgres,然后 PG 可能没有运行,或者它可能是并且它是 OSX 安装的。 可能发生的情况是,您可能在 localhost 上侦听端口 5432 时遇到冲突 - 使用 netstat -anp 查看在 5432 上侦听的内容(如果有的话)。如果 Mac OSX PG 已经在侦听该端口,则可能成为问题。
希望有帮助。 我听说自制软件会让事情变得有点难看,我交谈过的很多人都鼓励使用虚拟机。
对我来说,命令rm /usr/local/var/postgres/postmaster.pid
不起作用,因为我用自制软件安装了特定版本的 postgresql。
正确的命令是rm /usr/local/var/postgres@10/postmaster.pid
。
然后brew services restart postgresql@10
。
原因
Lion 已经安装了一个 postgres 版本,并默认使用这些二进制文件。 通常,您可以通过使用自制 postgres 二进制文件的完整路径来解决此问题,但其他程序可能仍然存在问题。
解决方案
卷曲http://nextmarvel.net/blog/downloads/fixBrewLionPostgres.sh | 嘘
通过
http://nextmarvel.net/blog/2011/09/brew-install-postgresql-on-os-x-lion/
您收到此错误的一个原因是您的本地 postgres 数据库在您重新启动计算机时关闭。 在新的终端窗口中,只需键入:
$psql -h localhost
重新启动服务器。
你好世界 :)
对我来说最好但奇怪的方法是做接下来的事情。
1)下载postgres93.app或其他版本。 将此应用程序添加到 /Applications/ 文件夹中。
2)在文件.bash_profile
(在我的主目录中)中添加一行(命令):
export PATH=/Applications/Postgres93.app/Contents/MacOS/bin/:$PATH这是从
Postgres93.app
到psql
的路径。
每次启动控制台时都会运行该行(命令)。
3)从/Applications/
文件夹启动Postgres93.app
。 它启动一个本地服务器(端口是“5432”,主机是“localhost”)。
4)在所有这些操作之后,我很高兴运行$ createuser -SRDP user_name
和其他命令并看到它有效! 每次系统启动时都可以运行Postgres93.app
。
5)此外,如果您想以图形方式查看数据库,您应该安装PG Commander.app
。 将您的 postgres 数据库视为漂亮的数据表的好方法
当然,它只对本地服务器有用。 如果此说明对遇到此问题的其他人有所帮助,我将很高兴。
我有 PostgreSQL 9.3 并得到了同样的错误,
无法连接到服务器:连接被拒绝 服务器是否在主机“localhost”(127.0.0.1) 上运行并接受端口 5432 上的 TCP/IP 连接?
我使用以下方法解决了这个问题:
chmod 777 /var/lib/pgsql/9.3/data/pg_hba.conf
service postgresql-9.3 restart
这个对我有用。
对于它的价值,当我的pg_hba.conf
文件( /etc/postgresql/9.5/main/pg_hba.conf
)中有错字( md4
而不是md5
)时,我遇到了同样的错误
如果您像我一样来到这里,请仔细检查该文件一次,以确保其中没有任何可笑的东西。
只要通过运行brew services restart postgresql
出现错误就重新启动 Postgres,然后再试一次
在本地运行 PostgreSQL 可能会有不同的问题。 我建议清理所有已安装的 postgres 版本并重新开始。 安装后,如果您的 rails 项目使用最新的db/schema.rb
,那么重新创建数据库非常容易
这是我通常在 Mac 上安装 PostgreSQL 的方法。 如果您在本地 root 用户下运行数据库,您可能希望省略创建todo
用户的最后一步
原因之一可能是
postgresql.conf 文件中的 unix_socket_directories 未与它要查找的目录一起列出。
在问题示例中,它正在寻找目录 /tmp 这必须在 postgresql.conf 文件中提供
像这样的东西:
unix_socket_directories = '/var/run/postgresql,/tmp' # comma-separated list of directories
这个解决方案对我有用。
如果您使用的是 MacOS 并使用自制软件,我发现这个答案非常有帮助:
https://stackoverflow.com/a/27708774/4062901
对我来说,我的服务器正在运行,但由于升级,我遇到了连接问题(注意:我使用 brew 服务)。 如果 Postgres 正在运行,请尝试cat /usr/local/var/postgres/server.log
并查看日志内容。 我的错误是迁移,而不是连接问题。
同样在他们提出的手动迁移之后(确实有效,但是)我发现我的用户不再有一个表。 试试这个命令来解决这个问题: createdb
(通过psql 回答: FATAL: database "<user>" does not exist )
来自不同stackoverflow问题的以下解决方案帮助了我:
找到 postgres 数据目录。 在使用自制软件的 MAC 上,它是/usr/local/var/postgres/ ,其他系统可能是/usr/var/postgres/
通过运行删除 pid 文件:
rm postmaster.pid
重新启动postgress。 在 Mac 上,运行:
brew services restart postgresql
这很简单。 仅在您的 database.yaml 文件中添加主机。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.