关于macos:Homebrew postgres坏了

Homebrew postgres broken

我使用自制软件在Mac(10.10.1/约塞米蒂)上安装了PostgreSQL 9.4.0。它不工作。

我在~/library/launchagents中创建了/usr/local/opt/postgresql/homebrew.mxcl.postgresql.plist的软链接。

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

1
2
> launchctl LOAD ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
/usr/LOCAL/Cellar/postgresql/9.4.0/homebrew.mxcl.postgresql.plist: Operation already IN progress

然而,Postgres似乎没有运行。

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

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

1
2
3
4
> 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"?

据我所知,我已经尝试了在讨论这个问题的其他stackoverflow线程上建议的所有修复方法。明确地:

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

我以前让自制的Postgres在这台机器上工作过。我想是什么破坏了它从版本8升级到版本9,但我不确定。

我没有任何需要保存的数据库。我愿意从Postgres开始清理;我现在只需要让它工作。有什么想法吗?

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

1
2
3
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,现在看起来是这样的。

1
2
3
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

不知道它是如何进入这种状态的,因为我不记得我使用了这个目录上的权限,但不管怎样。它现在起作用了。


我在新安装的约塞米蒂使用自制啤酒安装Postgres时遇到了同样的问题。

首先,我的BREW配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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运行良好。


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

运行initdb前创建数据目录,设置权限为0700

1
2
3
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,它将尊重数据目录的权限。

1
initdb -D /usr/LOCAL/var/postgres

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

1
createdb `whoami`

登录测试:

1
psql


在尝试用自制安装PostgreSQL之后,我得到了:

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

所以我尝试:

1
brew link postgresql

得到这个错误:

1
2
3
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.

这似乎是一个写许可的问题,所以我做到了:

1
sudo chown -R `whoami` /usr/LOCAL/share/man/

它之所以成功,是因为我能够做到(没有错误):

1
brew link postgresql

请注意,它们是处理此问题的homebrew的github线程:https://github.com/homebrew/homebrew/issue s/35240

我也遇到过类似的问题。詹姆斯的回答帮助我解决了这个问题。但后来我遇到了jbk提到的问题(在删除了/usr/local/var/postgres之后,它继续被重新创建)。

问题是,如果创建了symlink:

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

并启动了流程:

1
launchctl LOAD ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

您应该首先卸载它:

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

在执行詹姆斯的命令之前。

1
2
3
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命令应该作为超级用户运行:

1
sudo -s

对postgres目录的所有权应该授予您的dev用户:

1
chown my-dev-USER /usr/LOCAL/var/postgres

以下命令(以dev用户身份运行)应正确填充目录:

1
createdb `whoami`

运行:

1
psql -l

应该在postgre中显示这些操作之后的表和用户权限。

希望这有帮助。


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

1
brew postgresql-upgrade-DATABASE

这将通过将现有数据库升级到已将Postgres升级到的版本来解决问题。


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

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

1
2
3
sudo chown -R `whoami` /usr/LOCAL/lib/pkgconfig

brew link postgresql