自制的postgres坏了

时间:2014-12-30 06:25:34

标签: macos postgresql homebrew

我使用自制软件在我的Mac(10.10.1 / Yosemite)上安装了Postgresql 9.4.0。它不起作用。

我在〜/ Library / LaunchAgents中创建了/usr/local/opt/postgresql/homebrew.mxcl.postgresql.plist的软链接。

如果我尝试手动加载postgres,我会收到"操作正在进行的消息"

> launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
/usr/local/Cellar/postgresql/9.4.0/homebrew.mxcl.postgresql.plist: Operation already in progress

然而,postgres似乎没有运行。

> ps auxw | grep post
billmcn           670   0.0  0.0  2424272    452 s000  R+   10:12PM   0:00.01 grep post

我无法与命令行客户端连接。

> psql
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"?

据我所知,我已经尝试了other Stackoverflow线程上讨论此问题的所有修补程序。具体做法是:

  • 我已经卸载并重新安装了postgres和随附的Ruby gem。我的机器上没有postgres 8.0版本。
  • 我已经验证psql客户端程序是Homebrew安装的9.4.0版本,而不是Mac系统二进制文件。
  • 我已经确认/usr/local/var/postgres/postmaster.pid不存在。
  • 我重启了机器。

我之前确实有Homebrew postgres在这台机器上工作。我认为破坏它的是从版本8升级到版本9,但我不确定。

我没有任何我需要保留的数据库。我愿意用postgres开始清洁;我现在只需要让它上班。有什么想法吗?


问题似乎是/ usr / local / var / postgres目录的权限。这是我的var目录在事情不起作用时的样子。

ll /usr/local/var/
drwxr-xr-x  3 billmcn  admin  102 Dec 20 12:44 cache
drwxr--r--  2 root     admin   68 Dec 29 21:37 postgres

(whoami =" billmcn")

我删除了/ usr / local / var / postgres,卸载并重新安装了postgres,现在它看起来像这样。

ll /usr/local/var/
drwxr-xr-x   3 billmcn  admin  102 Dec 20 12:44 cache
drwx------  23 billmcn  admin  782 Dec 30 10:51 postgres

不知道它是如何进入这种状态的,因为我不记得使用此目录的权限,但无论如何。它现在有效。

8 个答案:

答案 0 :(得分:97)

我在新安装的Yosemite上使用自制软件安装postgres时遇到了同样的问题。

首先关闭我的brew配置如下:

HOMEBREW_VERSION: 0.9.5
ORIGIN: https://github.com/Homebrew/homebrew
HEAD: 9f6926265f8e4be7cc80dfe9042f2cd3c1e8dc9e
Last commit: 64 minutes ago
HOMEBREW_PREFIX: /usr/local
HOMEBREW_CELLAR: /usr/local/Cellar
CPU: quad-core 64-bit sandybridge
OS X: 10.10.1-x86_64
Xcode: 6.1.1
Clang: 6.0 build 600
X11: N/A
System Ruby: 2.0.0-481
Perl: /usr/bin/perl
Python: /usr/bin/python
Ruby: ~/.rvm/rubies/ruby-2.1.1/bin/ruby

我注意到的第一件事是我没有/usr/local/var/postgres的写入权限。发布sudo chown -R `whoami` /usr/local/var/postgres后很容易更改,然后重新安装了postgresql并执行了

cat /usr/local/var/postgres/server.log

显示:

postgres cannot access the server configuration file "/usr/local/var/postgres/postgresql.conf": No such file or directory

所以我删除了目录/usr/local/var/postgres并发出了初始化数据库的命令。

initdb -D /usr/local/var/postgres/

这似乎完成了伎俩并且postgres运行良好。

答案 1 :(得分:39)

我有同样的问题。这里的主要问题是initdb安装步骤将创建具有root所有权的目录,而不是Mac上的用户。要解决这个问题:

在运行initdb之前创建数据目录并设置权限0700

rm -rf /usr/local/var/postgres  # in case this is not your first try
mkdir /usr/local/var/postgres
chmod 0700 /usr/local/var/postgres

然后运行initdb,它将尊重数据目录的权限。

initdb -D /usr/local/var/postgres

对于grins和giggles,创建一个以用户命名的测试数据库:

createdb `whoami`

登录测试:

psql

答案 2 :(得分:13)

尝试使用Homebrew安装postgresql后,我得到了这个:

Warning: postgresql-9.5.2 already installed, it's just not linked

所以我试过了:

brew link postgresql

得到了这个错误:

Linking /usr/local/Cellar/postgresql/9.5.2... 
Error: Could not symlink share/man/man3/SPI_connect.3
/usr/local/share/man/man3 is not writable.

这似乎是一个写权限问题,所以我做了:

sudo chown -R `whoami` /usr/local/share/man/

它成功了,因为我能够做到(没有错误):

brew link postgresql

答案 3 :(得分:9)

请注意,他们是Homebrew的github处理此问题的主题:https://github.com/Homebrew/homebrew/issues/35240

我遇到过类似的问题。詹姆斯回答帮我解决了。但是我接着讨论了jbk提到的问题(在删除/ usr / local / var / postgres后,它继续被重新创建)。

问题在于,如果您已创建符号链接:

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

并启动了该过程:

launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

你应该先卸载它:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

在运行James的命令之前。

rm -rf /usr/local/var/postgres  # in case this is not your first try
mkdir /usr/local/var/postgres
chmod 0700 /usr/local/var/postgres

此外,如果像我一样,您有管理自制软件的管理员用户和将使用pgsl进行开发的普通用户,那么James命令应该以超级用户身份运行:

sudo -s

和postgres目录的所有权应该给你的开发者用户:

chown my-dev-user /usr/local/var/postgres

然后,以dev用户身份运行的以下命令应正确填充目录:

createdb `whoami`

运行:

psql -l

应该在这样的操作后向你展示postgre中的表和用户权限。

希望这会有所帮助。

答案 4 :(得分:1)

如果有人从以前的版本升级,请不要忘记:

brew postgresql-upgrade-database

这可以通过将现有数据库升级到将postgres升级到的版本来解决该问题。

答案 5 :(得分:0)

检查@leo_chaz_maltrait修复错误错误Could not symlink share/man/man3/SPI_connect.3 可能出现的另一个错误是:

Error: Could not symlink lib/pkgconfig/libecpg.pc

sudo chown -R `whoami` /usr/local/lib/pkgconfig

brew link postgresql

答案 6 :(得分:0)

为了后代,我遇到了这个问题,想指出对我有用的。

我正在High Sierra上运行postgres 11.2。我最近使用brew postgresql-upgrade-database从postgres 10升级了。

我不断收到错误psql: could not connect to server: No such file or directory,并且我的server.log指示为is another postmaster (PID 5894) running in data directory "/usr/local/var/postgres"?

我尝试了几种解决方案,包括重新启动计算机,使用postmaster.pid删除brew services restart postgres,但无济于事。我最终偶然发现了解决方案:

brew unlink postgresql && brew link postgresql

不知道为什么这样做,但主要将其放在此处,以便将来自己参考!在墙上扔东西直到它粘住!

答案 7 :(得分:0)

我最近遇到了一个问题,当我升级了某些brew更新/升级(主要是python版本等)时就开始了。

brew uninstall postgres
brew install postgresql@9.5
echo 'export PATH="/usr/local/opt/postgresql@9.5/bin:$PATH"' > ~/.zshrc
# you may need > ~/.bashrc if you use bash

我需要pg_dump,pg_restore等,以便能够正常工作

brew install libpq

启动服务

brew services start postgresql@9.5

从这里开始,我希望一切都能正常工作,但是仍然所有的Rails db命令都给出服务器未运行的错误。最后一点是拼图的缺失部分,它终于为我解决了。

gem uninstall pg
gem install pg -v 0.20.0 # which was set in Gemfile
# could also just probably do bundle install instead.