首页 文章

PostgreSQL错误'Could not connect to server: No such file or directory'

提问于
浏览
127

像其他一些人一样,当我在我的项目中运行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 localhost

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 does not accept connections on /tmp/.s.PGSQL.5432 . 我仍然希望有人能够对OS X上安装PostgreSQL背后的概念进行合理的解释,以及为什么这么困难 .

帮助进行故障排除的最新见解:

$ which psql // This tells you which PostgreSQL you are using when you run $ psql.

然后运行:

$ echo $PATH

需要考虑的关键是:

Ensure that the path entry for the copy of PostgreSQL you want to run COMES BEFORE the path to the OS X system's PostgreSQL.

这是决定运行PostgreSQL的核心要求,也是我所说的导致大多数这些问题的原因 .

18 回答

  • 5

    UPDATE: 如果您使用OSX,这里有更好的修复...

    http://postgresapp.com/


    旧答案:

    这是修复,更多信息在这里:

    https://github.com/mxcl/homebrew/issues/5004

    首先,停止db,然后

    • cd / var

    • rm -r pgsql_socket

    • ln -s / tmp pgsql_socket

    • chown _postgres:_postgres pgsql_socket

    • 重启postgres(不是你的电脑)

  • 8

    检查postgres目录中没有postmaster.pid,可能是 /usr/local/var/postgres/

    删除它并启动服务器 .

    检查 - https://github.com/mperham/lunchy是launchctl的一个很棒的包装器 .

  • 0

    对我来说,这是有效的

    rm /usr/local/var/postgres/postmaster.pid
    
  • 97

    对于你提到的上述错误,这对我有用..

    1)可能会更改postgres.conf文件中未指定的默认端口,如果您在安装时提到了其他默认端口号5432 .

    (要么)

    2)更改postgresql.conf文件中的端口号,然后重新启动数据库服务器

    (要么)

    3)代替psql类型的完整命令

    “psql -p 5432 -h localhost”

    • 服务器名称和端口号
  • 1

    If you are running Homebrew, uninstall Postgresql end pg gems:*

    $ gem uninstall pg
    $ brew uninstall postgresql
    

    Download and run the following script to fix permission on /usr/local:* https://gist.github.com/rpavlik/768518

    $ ruby fix_homebrew.rb
    

    Then install Postgres again and pg gem:*

    $ brew install postgresql  
    $ initdb /usr/local/var/postgres -E utf8
    

    To have launchd start postgresql at login run:

    $ ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
    

    Or start manually.

    Install pg gem

    $ gem install pg
    

    我希望有所帮助

  • 14

    当我将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
    

    This回答提供了更全面的解释以及解决问题的其他方法 .

  • 45

    所以对于这里的很多问题,似乎人们已经在运行psql并且不得不删除 postmaster.pid . 但是,我没有那个问题,因为我从来没有在我的系统中正确安装postgres .

    这是一个适用于MAC OSX Yosemite的解决方案

    • 我去了http://postgresapp.com/并下载了应用程序 .

    • 我将应用程序移动到了Application /目录

    • 我将它添加到$ PATH,将其添加到.bashrc或.bash_profile或.zshrc: export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin

    • 我从Applications目录运行了postgres并再次运行命令,它运行正常 .

    希望这可以帮助! Toodles!

    此外,这个答案对我帮助最大:https://stackoverflow.com/a/21503349/3173748

  • 0

    当您运行: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
    
  • 0

    我真的不懂Mac或Homebrew,但我非常了解PostgreSQL .

    您想知道PostgreSQL尝试启动日志的位置以及套接字目录适用于PostgreSQL . 默认情况下,在构建PG时,套接字目录为/ tmp / . 如果你在构建PG时没有改变它然后启动PG,你应该能够在/ tmp中看到一个套接字文件:ls -al / tmp

    套接字文件以“ . ”开头,所以你不会用'-a'来看ls .

    如果你没有在那里看到一个套接字,并且你没有看到ps awux中的任何内容grep postgres,然后PG可能没有运行,或者它可能是,并且它是OSX安装的 . 可能发生的情况是,您可能在侦听localhost上的端口5432时遇到冲突 - 使用netstat -anp来查看5432上正在侦听的内容(如果有的话) . 如果Mac OSX PG已经在侦听该端口,则可能是问题 .

    希望有所帮助 . 我听说自制软件可以让事情变得有点丑陋,我和很多人谈过鼓励使用虚拟机 .

  • 56

    The Cause

    Lion附带已安装的postgres版本,默认情况下使用这些二进制文件 . 一般来说,你可以通过使用自制postgres二进制文件的完整路径来解决这个问题,但是其他程序可能仍有问题 .

    The Solution

    卷曲http://nextmarvel.net/blog/downloads/fixBrewLionPostgres.sh | SH

    通过

    http://nextmarvel.net/blog/2011/09/brew-install-postgresql-on-os-x-lion/

  • 1

    你好,世界 :)
    The best but strange way for me was to do next things.

    1) 下载postgres93.app或其他版本 . 将此应用程序添加到/ Applications /文件夹中 .

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

    export PATH=/Applications/Postgres93.app/Contents/MacOS/bin/:$PATH
    

    这是来自 Postgres93.apppsql 的路径 . 每次启动控制台时都会运行行(命令) .

    3)/Applications/ 文件夹启动 Postgres93.app . 它启动本地服务器(端口为"5432",主机为"localhost") .

    4) 经过所有这些操作后,我很高兴运行 $ createuser -SRDP user_name 和其他命令并看到它有效!每次系统启动时都可以运行 Postgres93.app .

    5) 此外,如果您想以图形方式查看数据库,则应安装 PG Commander.app . 这是将postgres DB视为漂亮的数据表的好方法

    当然,它仅对本地服务器有用 . 如果这些指示可以帮助那些遇到这个问题的人,我将很高兴 .

  • 1

    我有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
    

    这个对我有用 .

  • 4

    为了它的 Value ,当我在 pg_hba.conf 文件中输入错字( md4 而不是 md5 )时,我遇到了同样的错误( /etc/postgresql/9.5/main/pg_hba.conf

    如果你像我一样到达这里,请仔细检查该文件一次,以确保那里没有任何荒谬的东西 .

  • 10

    出现此错误的一个原因是当您重新启动计算机时,本地postgres数据库会关闭 . 在新的终端窗口中,只需键入:

    $psql -h localhost
    

    重启服务器 .

  • 1

    在本地运行PostgreSQL可能会有不同的问题 . 我建议清理所有安装的postgres版本并重新开始 . 一旦安装完毕,如果你的rails项目是最新的,那么很容易重新创建你的数据库 db/schema.rb

    这是我通常install PostgreSQL on a Mac . 如果您在本地root用户下运行数据库,则可能需要省略创建 todo 用户的最后一步

  • -5

    其中一个原因可能是

    postgresql.conf文件中的unix_socket_directories未与其查找的目录一起列出 .

    在问题示例中,它正在查找目录/ tmp,这必须在postgresql.conf文件中提供

    像这样的东西:

    unix_socket_directories = '/var/run/postgresql,/tmp'    # comma-separated list of directories
    

    这个解决方案对我有用 .

  • 2

    如果您使用的是MacOS并使用自制软件,我发现这个答案非常有帮助:

    https://stackoverflow.com/a/27708774/4062901

    对我来说,我的服务器正在运行,但由于升级,我遇到连接问题(注意:我使用brew服务) . 如果Postgres正在运行,请尝试 cat /usr/local/var/postgres/server.log 并查看日志的内容 . 我的错误是迁移,而不是连接问题 .

    他们建议手动迁移之后(这确实有效)我发现我的用户不再有 table 了 . 尝试此命令来解决此问题: createdb (通过psql: FATAL: database "<user>" does not exist回答)

  • 0

    这很简单 . 仅在database.yaml文件中添加主机 .

相关问题