gpt4 book ai didi

postgresql - Brew Postgresql 启动但进程未运行

转载 作者:行者123 更新时间:2023-12-05 01:29:35 24 4
gpt4 key购买 nike

我在 Mac 上通过 Brew 安装了 Postgres。然后,我尝试启动它

| => brew services restart postgres
Stopping `postgresql`... (might take a while)
==> Successfully stopped `postgresql` (label: homebrew.mxcl.postgresql)
==> Successfully started `postgresql` (label: homebrew.mxcl.postgresql)

之后,我检查进程是否正在运行

(base) ________________________________________________________________________________
| ~/ @ MacBook-Pro (user)
| => ps -ef | grep postgres
501 61568 561 0 5:00PM ttys000 0:00.00 grep postgres

此外,brew services 产生以下内容

| => brew services
Name Status User Plist
dnsmasq unknown root /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
emacs stopped
postgresql error root /Library/LaunchDaemons/homebrew.mxcl.postgresql.plist
postgresql@12 stopped
rabbitmq stopped
unbound stopped

感谢任何有关如何解决此问题的帮助。

最佳答案

与 Linux 中的内置 pkg 管理器不同,macOS 上的 Homebrew 在大多数 brew 命令期间不需要 root 权限。唯一的异常(exception)是 sudo brew services 当您在端口 < 1024 上启动服务监听时。

你的问题的答案:你用 sudo brew services 弄乱了文件权限。

该解决方案适用于 x86 Mac。我没有在 M1 mac 上测试过它。 (Homebrew在x86 Mac下存放相关文件在/usr/local下,在M1 Mac下在/opt/homebrew下。)

### Run in Bash or Zsh

# Stop postgresql
sudo brew services stop postgresql
# In case service file is copied to ~/Library/LaunchAgents as well
brew services stop postgresql

# Fix permission of homebrew files
sudo chown -R $USER:admin $(brew --prefix)/*

# Remove socket like `/tmp/.s.PGSQL.5432`

# Restart postgresql without sudo
brew services start postgresql

除了上述修复,您可能还需要

  • 从 psql 12 进行数据库迁移 -> psql 13,查看 brew info postgresl 了解详情
  • 手动启动psql并查看启动日志
# Change /usr/local to /opt/homebrew on M1 Mac
# Check the start log
pg_ctl -D /usr/local/var/postgres start

# to stop it
pg_ctl -D /usr/local/var/postgres stop

sudo 和 brew

我不是说 postgresql 不能以 root 身份启动,但是 Homebrew 和 brew 服务 不是为 sudo 设计的>.

sudo brew services 将一些文件的所有者更改为 root。你最好把它们改回自己所有。

这是一个例子(检查警告部分)

❯ sudo brew services start adguardhome
Warning: Taking root:admin ownership of some adguardhome paths:
/usr/local/Cellar/adguardhome/0.106.3/bin
/usr/local/Cellar/adguardhome/0.106.3/bin/AdGuardHome
/usr/local/opt/adguardhome
/usr/local/opt/adguardhome/bin
/usr/local/var/homebrew/linked/adguardhome
This will require manual removal of these paths using `sudo rm` on
brew upgrade/reinstall/uninstall.
Warning: adguardhome must be run as non-root to start at user login!
==> Successfully started `adguardhome` (label: homebrew.mxcl.adguardhome)

sudo brew services 不够智能,无法自动将文件的 onwer bach 更改为 $USER

我已经编写了一个脚本来执行此操作:brew-fix-perm .但这对你来说还不够。您必须在 $(brew --prefix)/var/postgres 下更改回 postgres 配置文件的所有权。这就是我放置 sudo chown -R $USER:admin $(brew --prefix)/* 的原因。

相关回答

我知道一个固执的家伙坚持使用 sudo brew services 来启动 mysql。关于 brew 服务 的更详细的答案是 there .你可能想要一张支票。

关于postgresql - Brew Postgresql 启动但进程未运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67688802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com