关于osx snow leopard:PostgreSQL错误’无法连接到服务器:没有这样的文件或目录’

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

和其他一些人一样,当我运行rakedb:migrate在我的项目中,或者甚至为我的RubyonRails3.2应用程序尝试大多数数据库任务时,我也会遇到这个错误。

PGError (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"?

很久以前我用自制安装了PostgreSQL,最近我尝试安装MongoDB,但我的PostgreSQL安装从来没有像现在这样。我正在运行OS X v10.6雪豹。

怎么了?我怎么才能更好地理解PostgreSQL是怎样的,应该如何在我的Mac上设置?

到目前为止(我想)这告诉我PostgreSQL没有运行(?).

1
2
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正在运行?

1
2
? 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文件。我不确定这是否相关。

1
2
org.postgresql.postgres.plist
homebrew.mxcl.postgresql.plist

我尝试了以下方法,结果如下。

$psql-p 5432-h本地主机

1
2
3
4
5
6
7
8
9
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/目录中查找。您需要在堆栈溢出上搜索更多,但基本上您需要symlink postgresql,以便在该tmp路径中查找的任何内容都能找到真正的路径,如果这有意义的话。

在这个链接中,我发现了更多要尝试的东西,特别是按照上面的方法执行symlink,mac osx lion postgres不接受/tmp/.s.pgsql.5432上的连接。我仍然希望有人能对在OS X上安装PostgreSQL背后的概念以及为什么这一切如此困难作出一个恰当的解释。

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

1
$ which psql // This tells you which PostgreSQL you are USING WHEN you run $ psql.

然后运行:

1
$ echo $PATH

要考虑的关键是:

确保要运行的PostgreSQL副本的路径条目位于OS X系统PostgreSQL的路径之前。

这是一个核心需求,它决定了哪个PostgreSQL可以运行,并且我被告知这会导致大多数这些问题。


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

删除此并启动服务器。

检查-https://github.com/mperham/午餐是launchctl的一个很好的包装。


更新:这里有一个更好的修复如果你在OSX上…

网址:http://postgresapp.com/

老回答:

这里是修复程序,更多信息如下:

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

首先,停止数据库,然后

  • CD/VAR
  • rm-r pgsql_套接字
  • ln-s/tmp pgsql_插座
  • chown postgres:_postgres pgsql_套接字
  • 重新启动Postgres(而不是您的计算机)

  • 对我来说,这很管用

    1
    rm /usr/LOCAL/var/postgres/postmaster.pid


    对于你提到的上述错误,这对我来说是可行的。

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

    (或)

    2)更改postgresql.conf文件中的端口号,重启db服务器

    (或)

    3)不是psql,而是键入full命令,例如

    "psql-p 5432-h本地主机"

    • 服务器名称和端口号


    如果运行的是homebrew,请卸载postgresql end pg gems:。*

    1
    2
    $ gem uninstall pg
    $ brew uninstall postgresql

    下载并运行以下脚本以修复对/usr/local的权限:*https://gist.github.com/rpavlik/768518

    1
    $ ruby fix_homebrew.rb

    然后重新安装postgres和pg gem:。*

    1
    2
    $ brew install postgresql  
    $ initdb /usr/LOCAL/var/postgres -E utf8

    要让launchd在登录运行时启动postgresql,请执行以下操作:

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

    或者手动启动。

    安装PG宝石

    1
    $ gem install pg

    我希望能帮上忙


    当我将Postgres升级到9.3.x版本时,我遇到了这个问题。对我来说,最快的解决方法是将其降级到我以前的9.2.x版本(不需要安装新版本)。

    1
    2
    3
    4
    5
    6
    7
    8
    $ 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

    这个答案提供了一个更全面的解释以及解决问题的其他方法。


    所以在很多问题上,人们似乎已经在运行psql,必须删除postmaster.pid。但是,我没有这个问题,因为我从来没有在我的系统中正确安装Postgres。

    这是一个在Mac Osx Yosemite为我工作的解决方案

  • 我去了http://postgresapp.com/下载了这个应用程序。
  • 我将应用程序移动到应用程序/目录
  • 我将它添加到$path,方法是将它添加到.bashrc或.bash_profile或.zshrc:export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin中。
  • 我从applications目录运行postgres,然后再次运行该命令,它就工作了。
  • 希望这有帮助!嘟嘟!

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


    当你跑步的时候:psql-p 5432-h本地主机它不使用环回驱动程序,而是使用真正的套接字,因此需要配置Postgres来接受套接字连接。因此,即使pgadmin和其他客户机可以工作,PSQL也不会工作。

    您需要同时更改postgresql.conf文件和pg_hba.conf文件,以便允许通过真正的套接字进行连接。这也将允许从远程IP进行连接,这就是默认情况下禁用它的原因。

    这些文件在数据目录中,但实际位置可能会有所不同,这取决于Postgres的安装方式。运行postgres时,运行以下命令:

    1
    ps -ef | grep postmaster

    这两个文件是-d目录(可能是/usr/local/pgsql/data)。

    对于postgresql.conf文件,取消对listen_地址的注释并将其更改为:

    1
    listen_address = '*'

    对于pg_hba.conf,添加行:

    1
    host ALL ALL 0.0.0.0/0 md5

    我通过升级Postgres来解决这个问题。

    1
    2
    brew UPDATE
    brew upgrade

    然后我还必须升级数据库以与新的主要版本兼容,因为我从10升级到11。

    1
    brew postgresql-upgrade-DATABASE

    (来源:https://github.com/facebook/react native/issues/18760 issuecomment-410533581)


    我不太了解Mac或自制,但我对PostgreSQL非常了解。

    您想知道日志来自PostgreSQL尝试启动的位置,以及PostgreSQL的socket目录是什么。默认情况下,当您构建pg时,socket目录是/tmp/。如果在构建pg时没有更改这个值,然后启动pg,那么在/tmp中应该可以看到一个socket文件,如果这样做:ls-al/tmp

    套接字文件以"."开头,因此您不会看到它以"-a"到ls开头。

    如果你在那里看不到一个套接字,也看不到来自ps awux grep postgres的任何内容,那么pg可能没有运行,或者可能是,它是osx安装的。可能发生的情况是,在本地主机上监听端口5432时可能会发生冲突-使用netstat-anp查看在5432上监听的内容(如果有)。如果macosx pg已经在监听该端口,那么这可能是问题所在。

    希望有帮助。我听说自制啤酒会让事情变得有点难看,很多人都鼓励我使用虚拟机。


    我有PostgreSQL 9.3,也有同样的错误,

    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?

    我用以下方法修复了这个问题:

    1
    2
    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),我也经历了同样的错误。

    如果你像我一样到了这里,再检查一下那个文件,确保里面没有任何荒谬的东西。


    原因

    Lion附带了已经安装的Postgres版本,默认情况下使用这些二进制文件。一般来说,您可以通过使用Homebrew Postgres二进制文件的完整路径来解决这个问题,但其他程序可能仍然存在问题。

    解决方案

    curl http://nextmarvel.net/blog/downloads/fixBrewLionPostgres.sh | sh

    通孔

    Brew Install Postgresql on OS X Lion


    你好,世界:)对我来说最好但奇怪的方法是做下一件事。1)下载postgres93.app或其他版本。将此应用程序添加到/applications/文件夹。

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

    1
    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数据库视为漂亮数据表的好方法

    当然,它只对本地服务器有用。如果这个说明能帮助其他面临这个问题的人,我会很高兴的。


    如果你使用的是MacOS和自制啤酒,我发现这个答案非常有用:

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

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

    另外,在手动迁移之后,他们建议(这确实有效,但是)我发现不再有适合我的用户的表。尝试此命令修复:createdb(通过psql应答:fatal:database""不存在)


    只要运行brew services restart postgresql在出现错误时立即重新启动postgres,然后重试。


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

    1
    $psql -h localhost

    重新启动服务器。


    在本地运行PostgreSQL可能有不同的问题。我建议清理所有已安装的Postgres版本并重新启动。一旦安装了它,如果您的Rails项目具有最新的db/schema.rb,那么很容易重新创建数据库。

    下面是我通常如何在Mac上安装PostgreSQL。如果您在本地根用户下运行数据库,那么可能需要省略创建todo用户的最后一步。


    原因之一可能是

    postgresql.conf文件中的unix socket_目录没有与它要查找的目录一起列出。

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

    像这样:

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

    这个解决方案对我有效。


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